繁体   English   中英

从bash脚本运行时出现Rsync语法错误

[英]Rsync syntax error when run from bash script

我一直在研究使用rsync进行增量备份的备份脚本。

我已经手动测试了以下rsync命令,它可以正常运行并完成备份:

rsync -aAXv --delete --progress --link-dest=/backup/Uyuk/Uyuk-backup-part1/2014-02-24/ /mnt/backup/ /backup/Uyuk/Uyuk-backup-part1/2014-02-25/

但是,当我在备份脚本中运行同一命令时,出现以下错误:

rsync: -aAXv --delete --progress --link-dest=/backup/Uyuk/Uyuk-backup-part1/2014-02-24/ /mnt/backup/ /backup/Uyuk/Uyuk-backup-part1/2014-02-25/: unknown option
rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]

我在脚本上运行了bash -x,以准确确定发送到控制台的内容以及打印的内容:

+ rsync '-aAXv --delete --progress --link-dest=/backup/Uyuk/Uyuk-backup-part1/2014-02-24/ /mnt/backup/ /backup/Uyuk/Uyuk-backup-part1/2014-02-25/'

有人看到错了吗? 我找不到会导致语法错误的任何内容。

编辑:这是我在脚本中拥有的实际代码,这是一个相当大的脚本,因此,这里没有定义一些变量,但是您明白了。

mkdir -p "/backup/$HOST/$NAME/$TODAY"
#source directory
SRC="$MNT"
#link directory
LNK="/backup/$HOST/$NAME/$LAST/"
#target directory
TRG="/backup/$HOST/$NAME/$TODAY/"
#rsync options
OPT1="-aAXv --delete --progress --link-dest=$LNK"

#run the rsync command
echo "rsync $OPT1 $SRC $TRG"
rsync "$OPT1 $SRC $TRG" > /var/log/backup/backup.rsync.log 2>&1

你是通过你的选项列表作为一个参数,需要时作为参数列表传递它。 通常,如果其中的任何一个包含空格,则应在bash使用一个数组来保存您的参数。 请尝试以下操作:

mkdir -p "/backup/$HOST/$NAME/$TODAY"
#source directory
SRC="$MNT"
#link directory
LNK="/backup/$HOST/$NAME/$LAST/"
#target directory
TRG="/backup/$HOST/$NAME/$TODAY/"
#rsync options
OPTS=( "-aAXv" "--delete" "--progress" "--link-dest=$LNK" )

#run the rsync command
echo "rsync $OPT1 $SRC $TRG"
rsync "${OPTS[@]}" "$SRC" "$TRG" > /var/log/backup/backup.rsync.log 2>&1

引用时,将数组扩展${OPTS[@]}特殊地视为一个参数序列,每个参数均被单独引用以保留各个元素中的任何空格或特殊字符。 如果arr=("ab" cd) ,则echo "${arr[@]}"

echo "a b" "c" "d"

而不是

echo "a b c d"

这在不支持数组的shell中不起作用,但是后来发明了数组,因为没有一种安全的方法(即不使用eval )来处理没有它们的用例。

这个:

rsync "$OPT1 $SRC $TRG"

将所有预期的参数传递为一个参数, rsync不知道如何处理。

尝试以下方法:

rsync ${OPT1} ${SRC} ${TRG}

@chepner建议的方法在我的Mac OS X(10.9.4)上不起作用,但是eval起作用。

eval rsync "$OPT1 $SRC $TRG"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM