我需要向Perl的system
rsync
命令传递一个带空格的变量路径。
$mht_user = "username";
$mht_share = "/mypath/with some space/01. continue/another space/";
$mht_dstpath = $mht_user.'@'.$mht_host.":".$mht_share."";
我需要将目标路径传递给rsync
命令
system ("/usr/bin/rsync -acz -H --delete /my source path ".$mht_dstpath.");
rsync
不喜欢带有空格的路径,所以我尝试以这种模式编写路径:
$mht_share = "/mypath/with\ \some\ \space/01.\ \continue/another\ \space/";
rsync接受它,但它将路径分为:
/mypath/with
如何将带空格的路径传递给rsync?
1条答案
按热度按时间ttcibm8c1#
了解问题
这最终是一个shell问题,让我们跳出循环,用
rsync
来说明这个问题下面是一个简单的脚本
printargs.pl
,它列出了它的参数,我们可以用它来显示运行system
时实际传递给程序的内容现在使用您正在使用的一些参数列表调用它
输出为
注意,shell在嵌入的空格上拆分了
/my source path username@host:/mypath/with some space/01. continue/another space/.
选项1:使用Shell报价
您可以使用单引号将字符串括起来并嵌入空格,如下所示
输出为
选项2:避免使用 shell
这来自
system
文档如果LIST中有多个参数,或者LIST是一个具有多个值的数组,则使用列表中其余元素提供的参数启动列表中第一个元素提供的程序。
这句话有点令人困惑,它的意思是--如果您将程序名及其参数作为Perl列表传递给
system
,您将绕过shell。产出