Цикл while запускается только один раз [дубликат]

Вы не можете напрямую это. Что вы можете сделать, это (как вы говорите) использовать stdout и каналы. Не идеально и не особенно элегантно, поэтому вам, вероятно, следует переосмыслить свои требования и предлагаемое решение.

Предположим, файл, о котором идет речь, должен называться date , и вы хотите, чтобы он выводил сообщение о текущей дате / времени:

# Create the "file" as a FIFO (a pipe)
mkfifo date

# Start the background process that always ensures there's data in the FIFO
( while :; do ( echo "The current date/time is $(date)" ) >date; done ) &

# Now read the "file" that's actually a pipe
date        # Date/time now
cat date    # Content from the "file" that's actually a pipe
date        # Date/time now, again

# And a minute or so later, try that again, just to show the effect of a
# repeated read...
cat date
3
31.08.2016, 16:58
1 ответ

Думаю, проблема с вашим выводом df -h .

Попробуйте использовать df -Ph

Обновление:

Согласно странице руководства, -P относится к выходному формату POSIX

-P, --portability
    use the POSIX output format

И, если ваши разделы имеют большую длину и при этом обработка текста с помощью вашей команды (без -P ) ожидаемый вывод строки будет состоять из двух строк.

Ожидание (пример):

/dev/mapper/rootvg-tmp/tmp1   86
/dev/mapper/rootvg-tmp/tmp2   90
/tmp   90

Фактический результат (пример):

/dev/mapper/rootvg-tmp/tmp1
86
/dev/mapper/rootvg-tmp/tmp2
90
/tmp   90

Таким образом, в этом случае ваше условие в скрипте не будет соответствовать первым двум разделам, так как '{print $ 2}' будет отсутствовать, а $ util -ge $ threshold будет ложным.

HTH

0
27.01.2020, 21:38

Теги

Похожие вопросы