在下面的代码中,p00
是一个命名管道,使用mkfifo p00
创建。
在控制台1中,我跑了:
% perl -ne 'print "PERL: $_"' < p00
然后,当上面被阻止(如预期的那样)时,在控制台2中我跑了
% seq 3 > p00
结果,控制台1中出现以下内容:
PERL: 1
PERL: 2
PERL: 3
%
这是几乎我希望实现的结果,除了perl
脚本在打印第三行后终止的事实。
我希望脚本在可用后继续回显行(前缀为“PERL:”),否则阻止。
以上表达式上面的单行的变体类似期望的行为:
perl -e 'while ( 1 ) { print "PERL: $_" while <>; sleep 1 }' < p00
...但这不是真正的交易,因为它在等待输入时不会阻塞,也不会在输入时立即回应它。
注意:
答案 0 :(得分:1)
在阅读Maxim Yegorushkin的评论之后,我意识到我所要做的就是摆脱第二版中的sleep 1
。即,这完全符合我的要求:
perl -e 'while ( 1 ) { print "PERL: $_" while <> }' < p00
正如马克西姆所写,内环在收到EOF
时终止;然后外部循环将脚本返回到阻塞状态,等待输入... Doh!