Bash rsync脚本出错
发布时间:2020-12-15 18:31:59 所属栏目:安全 来源:网络整理
导读:bash脚本具有以下行 rsync $OPTS $BACKDIR $USER@$DEST:$DESTDIR 但其中一个选项是rsh =’ssh -p2222′ 它抱怨说: rsync: -p2222': unknown option rsync error: syntax or usage error (code 1) at main.c(1425) [client=3.0.7] 但是当我将脚本更改为: ec
bash脚本具有以下行
rsync $OPTS $BACKDIR $USER@$DEST:$DESTDIR 但其中一个选项是rsh =’ssh -p2222′ rsync: -p2222': unknown option rsync error: syntax or usage error (code 1) at main.c(1425) [client=3.0.7] 但是当我将脚本更改为: echo rsync $OPTS $BACKDIR $USER@$DEST:$DESTDIR 并手动运行它工作的打印命令. 请指教
简答:见
BashFAQ #50.
答案很长:将命令(或命令的一部分)放入变量中,然后将它们完整地取出是很复杂的.当shell在命令行上扩展变量时,如果变量是双引号,则不解析它(参见@Dennis Williamson的答案);如果它不在引号中,则其中的空格将被解析为参数中断,但不会解析引号和转义(这就是为什么在rsync中的某个args中出现了关于文字引号的错误).在任何一种情况下,将引号放在变量的值中没有任何用处. 但是,有几种方法可以修复脚本,具体取决于OPTS的复杂程度: >如果–sh是OPTS中唯一的东西,那么双引它(如Dennis Williamson的回答): OPTS='--rsh=ssh -p2222' rsync "$OPTS" "$BACKDIR" "$USER@$DEST:$DESTDIR" (注意其他args周围的双引号:这是为了防止错误,如果它们包含空格,并且通常是良好的脚本卫生.) rsync --rsh='ssh -p2222' $RESTOFOPTS "$BACKDIR" "$USER@$DEST:$DESTDIR" >如果这些简单情况都不适用,请使用数组而不是普通变量: OPTS=(-x --delete --inplace) if [[ "$rsync_version" == 2.* ]]; then OPTS+=(-aE) else OPTS+=(-aNHX) fi if [[ -n "$using_rsh" ]]; then OPTS+=('--rsh=ssh -p2222') fi rsync "${OPTS[@]}" "$BACKDIR" "$USER@$DEST:$DESTDIR" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |