windows - Windows 上的 Perl、文件关联和 I/O 重定向

标签 windows perl redirect file-association

有人可以解释通过文件关联调用 perl 脚本与通过 perl.exe 显式调用相同脚本之间的区别吗?

显然,当通过文件关联调用脚本时,I/O 重定向不能很好地工作,我真的很想知道为什么。

例如看看 Activestate FAQ for Perl on Windows .只要脚本不通过重定向接收其输入,cat 文件 示例就可以完美运行。所以

cat file.txt

按预期工作,但是

whoami | cat.pl

没有。不仅需要 .pl 扩展名,而且 whoami 的输出显然也没有通过管道传输到脚本中。脚本已运行(可以通过修改示例 cat.pl 脚本来验证),但出于某种原因,它没有接收到 whoami 的输出作为输入。

但是,如果我这样调用脚本:

whoami | perl cat.pl

一切都按预期进行。

显然,通过文件关联运行脚本与使用脚本显式调用 perl.exe 之间存在重要区别。

FAQ 提到了这个问题,并指出使用pl2bat 为脚本生成bat 文件覆盖可以解决问题,但我不明白为什么有必要这样做。

请赐教。

最佳答案

看起来这是 Windows 2000 中的一个已知错误:STDIN/STDOUT Redirection May Not Work If Started from a File Association .

我在 WinXP 上使用 Strawberry Perl 得到了相同的行为,但是一旦我创建了上述文章中描述的注册表项(即使 reg 项针对 Win2K),stdin 的工作方式如下预期。

为了完整起见,如果上面的链接消失了,它建议创建的 reg 条目是:

  1. 启动注册表编辑器。
  2. 在注册表中找到并单击以下项: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  3. 在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
    • 值名称:InheritConsoleHandles
    • 数据类型:REG_DWORD
    • 基数:十进制
    • 数值数据:1
  4. 退出注册表编辑器。

编辑:我应该补充一点,尽管知识库文章声称它已在 XP SP1 中修复,但我已经安装了 XP SP3。所以 MS 是否已经破坏了它,或者从未完全修复它,我不能说!

关于windows - Windows 上的 Perl、文件关联和 I/O 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1286873/

相关文章:

windows - Gradle:无法连接到 Windows 上的 Kotlin 守护进程

perl - 真的没有比 POD 更好的方法来记录 perl 代码了吗?

php - 如何从 PHP 进行 301 重定向?

java - 如何在 Websphere Liberty 上启动新流程并使其可靠

javascript - 通过 facebook iframe 中的 javascript 重定向

php - 在 url (htaccess) 中隐藏参数(查询字符串),但将此参数发送到页面 (php)

ruby - dl/win32 加载错误

node.js - 如何将nodejs nightly build安装到我的Windows环境中

windows - 面向 Java 开发人员的日志文件分析器

algorithm - 部分排序算法