我从STDIN读了几行。如何将剩余的STDIN传递给从标准输入读取的命令(例如md5sum
或wc
)?Perl:将打开的文件句柄传递给程序读取STDIN
我可以做一个:
read_a_few_lines_from_diamond_operator();
open (C, "|cmd");
while(<>) { print C }
close C;
cleanup_after_C();
但efficency原因,我想不要触摸输入,而是通过STDIN的文件句柄。有点像:
seq 10 | (read A; wc)
其中read
读取尽可能多地传递,其余上wc
之前喜欢。不过,我不能使用这个解决方案,因为我需要从我的perl程序中启动命令,并且我需要在cmd
完成后开始工作。
我从文件'foo'读了几行。我怎样才能将其余部分传递给从标准输入读取的命令(例如md5sum
或wc
)?
我可以做一个:
open (F, "<foo");
read_a_few_lines_from_F();
open (C, "|cmd");
while(<F>) { print C }
close C;
cleanup_after_C();
但efficency原因,我想不要触摸输入,而是通过文件“富”的其余部分。
我有一种感觉,它可以用诡计像select
,open(FOO,">&STDOUT)
,exec 6<&0
,fork
,pipe
来完成。
优雅的解决方案,让你竖起大拇指,但它有两个问题:它杀死perl(我澄清了这个问题,以清楚表明这不会对我有用);它不涉及第二部分(读取'foo'文件)。 –
它为什么不起作用?就像答案所说,它适用于'system'和'exec'。 'perl -e'print <>;系统( “猫”);打印“仍然在这里\ n”'
tripleee
斑点。这工作:'seq 10 | perl -e'sysread(STDIN,$ a,1);打印“$ a bar”;系统(“猫”);打印“仍然在这里\ n”''。尽管如此,它仍然会读取文件'foo'。 –