Вы не можете напрямую это. Что вы можете сделать, это (как вы говорите) использовать 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
Думаю, проблема с вашим выводом 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