Bri*_*sen 6 windows perl redirect file-association
有人能解释通过文件关联调用perl脚本与通过显式调用相同脚本之间的区别perl.exe吗?
显然,当通过文件关联调用脚本时,I/O重定向不能很好地工作,我真的很想知道原因.
例如,在Windows上查看Perl的Activestate FAQ.cat file只要脚本没有通过重定向接收输入,该示例就可以正常工作.所以
cat file.txt
Run Code Online (Sandbox Code Playgroud)
按预期工作,但是
whoami | cat.pl
Run Code Online (Sandbox Code Playgroud)
才不是.不仅.pl需要扩展,而且显然输出whoami不会通过管道传输到脚本中.运行脚本(可以通过修改示例cat.pl脚本来验证),但由于某种原因,它不会接收whoami输入的输出.
但是,如果我像这样调用脚本:
whoami | perl cat.pl
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.
显然,通过文件关联运行脚本和perl.exe使用脚本显式调用之间存在重要区别.
常见问题解答提到了这个问题,并指出pl2bat用于为脚本生成bat文件封面修复了问题,但我不明白为什么这是必要的.
请赐教.
看起来它是Windows 2000中的已知错误:如果从文件关联启动,STDIN/STDOUT重定向可能不起作用.
我得到你在WinXP上用Strawberry Perl描述的相同行为,但是一旦我创建了上面文章中描述的注册表项(即使reg条目针对Win2K),stdin按预期工作.
为了完整性,如果上面的链接消失,它建议创建的reg条目是:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\ExplorerInheritConsoleHandlesREG_DWORDDecimal1编辑:我应该补充一点,即使KB文章声称它已在XP SP1中修复,我已经安装了XP SP3.所以,无论MS是打破了这个,还是从未完全修复它,我都说不出来!