2013-12-04 2 views
1

Просто вопрос: Почему после однолинейного не работает? Как сделать IO без блокировки?Как сделать скрипт оболочки незаблокированным?

$ while true; do date; sleep 1; done | tail -f 
+1

что вы пытаетесь достичь. 'tail -f' предназначен для отслеживания изменений в файле. Когда вы вставляете в него вход, он ведет себя как обычный хвост, а это значит, что он не может определить, что выводить до тех пор, пока он не достигнет конца ввода, чего никогда не происходит, поскольку это бесконечный цикл. – Thayne

+0

Спасибо, я понял, что мое недоразумение, команда 'tail' собирается захватить хвост в первую очередь. – ernix

ответ

2

Проблема не в неблокирующем IO; это с вашим выбором tail.

Это выводит каждую строку с двоеточием (все из них):

while true; do date; sleep 1; done | grep : 

Проблема tail в том, что она идет в последние 10 десять строк , а затем начинается после. Но в вашем случае он никогда не доходит до конца, поэтому он не может печатать последние десять.

1

Если то, что вы хотите сделать, это постоянно заменить последнюю строку с датой вы могли бы сделать это:

while true; do echo -en "\r"`date`; sleep 1; done 
Смежные вопросы