2

我有一个如下的 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() 运行。

4

1 回答 1

3

当您通过双引号和远程 shell 对插值转义元字符时,qx它本身可能会再次对字符串进行插值,在这种情况下,您可能需要添加另一个级别的转义。从qx 的文档中

一个字符串,它(可能)被插值,然后作为系统命令使用 /bin/sh 或其等效命令执行。...
如何评估该字符串完全取决于系统上的命令解释器。在大多数平台上,如果您希望按字面意思对待 shell 元字符,则必须保护它们。这在实践中很难做到,因为不清楚如何转义哪些字符。有关手动 fork() 和 exec() 以安全地模拟反引号的干净且安全的示例,请参见 perlsec。

于 2019-06-18T06:12:08.163 回答