Перенаправить именованный канал в цикле perl - PullRequest
1 голос
/ 30 июня 2019

Наличие именованного канала в качестве источника

shell1> mkfifo ~/myfifo
shell1> tee -a ~/myfifo
ciao

Почему следующая команда не выводит никаких сообщений?

shell2> cat ~/myfifo | perl -ane 'print "testa\n"' | cat

При удалении последней команды все выполняются как положено

shell2> cat ~/myfifo | perl -ane 'print "testa\n"'
testa

1 Ответ

1 голос
/ 30 июня 2019

Когда STDOUT процесса Perl не подключен к tty, автоматическая очистка отключена.Это тот случай, когда передается вывод процесса Perl на cat вместо его вывода на терминал.Это приводит к зависанию команды cat в ожидании ввода от процесса Perl.

Это можно исправить, включив автоматическую очистку для STDOUT:

cat ~/myfifo | perl -ane 'STDOUT->autoflush(1); print "testa\n"' | cat 

или вы можете использовать unbuffer команда:

cat ~/myfifo | unbuffer -p perl -ane 'print "testa\n"' | cat
...