Perl qx() 命令未按预期工作



我有一个perl脚本,如下所示,我想使用rsh从Linux机器访问远程Windows机器上的网络路径。

$cmd = "rsh -l $username $host "pushd \\network\path\to\the\directory && dir"";
print $cmd, "n";
print qx($cmd);

当我运行脚本时,第三行打印输出The system cannot find the path specified. 但是,如果我直接从终端运行第二行打印的命令,它可以正常工作。

我无法理解为什么脚本不起作用。如果命令在终端工作,它也应该使用 qx(( 工作。

当您通过

双引号和远程 shell 对内行转义元字符时,qx 本身可能会再次内插字符串,在这种情况下,您可能需要添加另一个级别的转义。来自 qx 的文档:

一个字符串,它(可能(被内插,然后作为系统命令与/bin/sh 或其等效项一起执行。
如何计算该字符串完全取决于系统上的命令解释器。在大多数平台上,如果您希望从字面上处理 shell 元字符,则必须保护它们。这在实践中很难做到,因为不清楚如何转义哪些角色。请参阅 perlsec 以获取手动 fork(( 和 exec(( 的干净安全示例,以安全地模拟反引号。

相关内容

  • 没有找到相关文章

最新更新