gpt4 book ai didi

windows - 为什么我在 Perl 中打开的管道中的 * 在 Windows 上不起作用?

转载 作者:可可西里 更新时间:2023-11-01 14:42:21 25 4
gpt4 key购买 nike

我在使用 Perl 时遇到了这个奇怪的问题。我试图从我的 Perl 脚本中执行一个外部程序,这个外部程序将字符串 + 通配符作为参数。我的 Perl 程序看起来像这样

my $cmd_to_run = 'find-something-in-somedb myname* |' 
open(procHandle, $cmd_to_run); # I am using open because I want to
# parse the output using pipes

由于某些奇怪的原因,运行此 Perl 脚本(在 Windows 下)调用 open 函数以错误结束:

'sqlselect' is not recognized as an internal or external command

我猜它与我的命令字符串中出现的 * 有关,因此我删除了它,现在我的命令字符串看起来像这样

my $cmd_to_run = 'find-something-in-somedb myname|'

现在,当我运行我的 Perl 脚本时,它运行得非常好。只有存在通配符时才会出现问题。

一些注意事项:

  1. 我在相同的 cmd 提示符下(我正在执行此 perl 脚本的地方)使用通配符运行了相同的命令,它运行得非常好..

  2. 当我在 Windows 中使用 _open 函数在 C 中编程时,同样的命令有效。

  3. 问题似乎只有在出现通配符 * 时才会出现,至少我是这么猜的

  4. 不,我还没有在 Unix 中尝试过这个。

有什么线索吗???

编辑:我发现这与 ENV 有关。我试图运行的程序仅在搜索字符串中存在“*”通配符时才使用“sqlselect”...find-something-in-somedb 和 sqlselect 都存在于同一位置。在这种情况下,perl 如何能够找到“find-in-db”而不是“sqlselect”

抱歉,我意识到原来的问题现在变成了其他问题。与“ENV”有关,与 Wildcard 无关 *

最佳答案

建议使用open的三参数形式

open(procHandle, '-|', 'find-something-in-somedb', 'myname*');

因为它绕过了 shell(它将执行 * 扩展)。

但是,在 Windows 上,应用程序通常会执行自己的引用解析和 * 扩展,因此您可能需要

open(procHandle, '-|', 'find-something-in-somedb', '"myname*"');

甚至

open(procHandle, '-|', 'find-something-in-somedb "myname*"');

因为我不确定 Perl 如何以及何时将事情交给 cmd

关于windows - 为什么我在 Perl 中打开的管道中的 * 在 Windows 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1111711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com