我试图在perl中创建一些基本类似于unix的东西。tee
命令。我试着读每一行STDIN
,在上面运行一个替换,然后打印出来。(最后,也要将它打印到文件中)如果我使用控制台输入,这是可行的,但是如果我尝试将输入管道输送到命令中,它什么也不做。下面是一个简单的例子:
print "about to loop\n";
while(<STDIN>)
{
s/2010/2009/;
print;
}
print "done!\n";
我试图像这样将dir命令传送到它:
C:\perltest>dir | mytee.pl
about to loop
done!
为什么它看不到管道输入?(如果相关的话,我在WinXP上使用Perl 5.10.0。)
发布于 2018-01-29 13:55:40
这实际上是Windows处理IO重定向的一个错误。我现在正在寻找引用,但正是这个bug要求您指定
dir | perl filter.pl
而不是能够使用
dir | filter
见microsoft KB文章如果从文件关联开始,STDIN/STDOUT重定向可能无法工作:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
REG_DWORD
Decimal
1
C:\Temp> cat filter.pl
#!/usr/bin/perl
while ( <> ) {
print "piped: $_";
}
C:\Temp> dir | filter
piped: Volume in drive C is MAIN
piped: Volume Serial Number is XXXX-XXXX
piped:
piped: Directory of C:\Temp>
piped:
piped: 2010/03/19 03:48 PM .
piped: 2010/03/19 03:48 PM ..
piped: 2010/03/19 03:33 PM 32 m.pm
piped: 2010/03/19 03:48 PM 62 filter.pl
https://stackoverflow.com/questions/-100007255
复制相似问题