我有一个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(( 的干净安全示例,以安全地模拟反引号。