2013-09-04 1 views
3

Мой текущий кодКак сказать команду хвост оболочки не ждать параметра

tail -n 1 `ls -1t /path/*.txt 2>/dev/null | head -n 1` | awk '{print $1}' 

работает отлично, если есть по крайней мере один *.txt файл в каталоге.

Но если такого файла нет, tail ждет ввода и не заканчивается.

Как мне изменить код, чтобы он завершился, даже если файл отсутствует?

ответ

1

Прошел быстрый тест, добавив /dev/null в качестве «поддельного» файла, похоже, делает трюк.

tail -n 1 `ls -1t /path/*.txt 2>/dev/null | head -n 1` /dev/null | awk '{print $1}' 
+0

Большой совет. Чтобы заставить его работать 'tail -qn 1', вместо' tail -n 1' необходимо. –

-1

Простая инструкция if, чтобы проверить, существует ли файл, вероятно, является лучшим и наименее запутанным способом его выполнения. КШ:

if [ -f /path/*.txt ]; then 
    tail -n 1 `ls -1t /path/*.txt 2>/dev/null | head -n 1` | awk '{print $1}' 
fi 

Добавление Баш синтаксис который differenent

files=(f/path/*.txt) 
if [ -f ${files[0]} ]; 
    tail -n 1 `ls -1t /path/*.txt 2>/dev/null | head -n 1` | awk '{print $1}' 
fi 
0

Я думаю, что вы можете поставить таймаут на чтение, что-то вроде этого: -

tail -f *.txt | read -t 30 line 

или это : -

if [ -f /path/*.txt ]; then 
    tail -n 1 `ls -1t /path/*.txt 2>/dev/null | head -n 1` | awk '{print $1}' 
fi 
+1

не будет работать, если есть несколько файлов .. –

+0

/DEV/нуль, кажется, сделать трюк !!!! :) –

+0

??? ................... –

Смежные вопросы