【发布时间】:2015-01-12 08:57:32
【问题描述】:
我正在尝试从 perl 脚本中运行“wget”发布命令。我在 Windows 7 机器上使用草莓 perl。 post 参数包括与符号 (&) 字符,当我在反引号内运行 wget 时,与符号被视为命令的结尾,就好像我希望在与符号之前的所有内容在后台运行一样。我已经尝试了几种方法来尝试正确地逃避 & 符号。但是,我的想法已经用完了。
所以,我尝试运行的命令类似于:
$wget = "/c/workarea/wget/bin/wget";
$value1 = 1;
$groupName = "group1";
$output = `$wget --post-data 'Field1=${value1}&Field2=Val2&Field3=${groupName}' "http://localhost/LocalPage"`;
如果我从 bash 命令行运行命令,如下所示,它可以正常工作:
/c/workarea/wget/bin/wget --post-data 'Field1=1&Field2=Val2&Field3=group1' "http://localhost/LocalPage"
但是,当我在 perl 脚本中运行它时,会出现如下错误:
'Field2' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
'Field3' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
我已将单引号中的命令的完整“post”部分放在双引号内,因为我发现这是一个建议,表明双引号内的任何内容都不会被解释。就正在执行的命令而言,这似乎有效,而不是将“&”视为“在后台运行”字符。但是,正在执行的结果命令并没有做我想要做的事情。这意味着 POST 不像我从命令行运行上述命令时那样从 perl 脚本发布。我尝试使用单个“\”和双“\”来转义“&”字符,因为我知道有时在传递字符串时可能需要多次转义。我什至用'\\'尝试过。但是,这似乎没有任何影响。
我想使用反引号,这样我就可以解析命令的输出,以便稍后在脚本中做出进一步的决策。所以,我认为我需要反引号而不是 'system()'。
提前感谢您对我需要如何逃脱或引用此内容以获得正确处理的任何帮助。或者,如果有一种方法可以在反引号被解释并传递给要执行的 shell 之后查看正在尝试的内容。如果我知道这一点,我想我可能能够更好地分辨出我做错了什么。
问候, sjmyst
【问题讨论】:
标签: escaping ampersand strawberry-perl backticks