Shell(/bin/bash
)将单引号添加到从for
循环中的文件读入的变量中,并导致rsync
失败。Shell将单引号添加到rsync失败的变量
我有一个shell脚本做一堆rsync
s。输入文件看起来是这样的: /home/account/this
子目录
的for循环看起来是这样的:
IFS=$'\n'
for SOURCE_DEST in `cat file_list`
do
rsync -av -e 'ssh -p 2222' [email protected]:$SOURCE_DEST
done
没有IFS=$'\n'
,默认导致$SOURCE_DEST
只包含:的 /home/account/this
代替/home/account/this subdirectory
。
但是,当我使用IFS=$'\n'
运行此脚本时,它会在$SOURCE_DEST
周围提供单引号,例如:'[email protected]:/home/account/this subdirectory'
,这会导致rsync失败并执行奇怪的操作。
例子:
rsync --delete-after -av -e 'ssh -p 2222' '[email protected]:/home/account/this subdirectory'
其失败,我需要的是这个没有单引号:
rsync --delete-after -av -e 'ssh -p 2222' [email protected]:/home/account/this subdirectory
如果我正确地阅读了这个问题,'$ {SOURCE_DEST}'应该是'/ home/account /这个子目录',它包含一个空格。 – Johnsyweb 2012-02-01 19:46:41
嗯。你可能是对的 - 起初我想过,但不知道如何理解它。如果是这样,不应该更难。那么我也会更新解决方案。 – FatalError 2012-02-01 19:52:16
是的,应该有一个空间,因为它将源路径复制到DEST路径。 – 2012-02-01 21:22:35