Perl qx()命令无法按预期工作

时间:2019-06-18 05:39:05

标签: perl terminal remote-connection rsh 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()来工作。

1 个答案:

答案 0 :(得分:2)

尽管您使用双引号和远程shell对元字符进行插值转义,但是qx本身可能会再次对字符串进行插值,在这种情况下,您可能需要添加另一级转义。来自the documentation of qx

  

(可能)被内插,然后与/ bin / sh或其等效项一起作为系统命令执行的字符串。 ...
  字符串的求值方式完全取决于系统上的命令解释器。在大多数平台上,如果要按字面意义对待外壳元字符,则必须保护外壳元字符。实际上,这很难做到,因为尚不清楚如何转义哪些字符。请参见perlsec,以获取有关安全地模拟反引号的手动fork()和exec()的干净而安全的示例。