在下面的代码中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
...但这不是真正的交易,因为它在等待输入时不会阻塞,也不会在输入可用时立即回显它。
笔记:
- 这个问题背后的动机是教育(就是我的),仅此而已;我不是要解决任何实际问题;我只是想学习更多 perl(和 unix)。
- 我不确定这个问题是否更适合 unix.se.com;如果是的话,我很乐意在那里重新发布它;让我知道。