将命名管道作为源
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
答案 0 :(得分:1)
当Perl进程的STDOUT
未连接到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