Я пытаюсь применить временные метки на стандартный вывод процесса. Для надлежащих временных меток , которые будут применяться, я пытаюсь unbuffer
стандартного вывода процесса. Это работает с unbuffer
но не с stdbuf
как я ожидал. Рассмотрим следующий скрипт медленной печати « slowprint »:
#!/bin/bash
if [ $# -ne 2 ]; then
echo "usage: ${0%%/*} <file> <delay in microseconds>"
exit 1
fi
DELAY=$2 perl -pe 'BEGIN{use Time::HiRes qw(usleep)} { usleep($ENV{DELAY}) }' $
Теперь сравните следующие попытки применить метки времени:
stdbuf -oL ./slowprint <(ls) 100000 |
awk '{ print strftime("%H:%M:%S"), $0; fflush(); }'
против
unbuffer ./slowprint <(ls) 100000 |
awk '{ print strftime("%H:%M:%S"), $0; fflush(); }'
Второй работает для меня, а первый нет, хотя я ожидаю, что они сделают то же самое. В настоящее время unbuffer
не подходит, потому что он глотает коды ошибок при определенных обстоятельствах (я написал отдельный вопрос об этом поведении).