Bash rsync脚本出错

2022年 10月 18日 发表评论
免费、便宜/高性价比 服务器汇总(已更新):点击这里了解

本站教程收集整理的这篇文章主要介绍了Bash rsync脚本出错,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

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中出现了关于文字引号的错误).在任何一种情况下,将引号放在变量的值中没有任何用处.

但是,有几种方法可以修复脚本,@R_673_9863@于OPTS的复杂程度:

>如果–sh是OPTS中唯一的东西,那么双引它(如Dennis Williamson的回答):

OPTS='--rsh=ssh -p2222'  rsync "$OPTS" "$BACKDIR" "$USER@$DEST:$DESTDIR"

(注意其他args周围的双引号:这是为了防止错误,如果它们包含空格,并且通常是良好的脚本卫生.)
>如果OPTS的内容是常量(或至少是–rsh部分),那么不要试图将它放在变量中,只需直接使用它:

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"

本站总结

以上是本站教程为你收集整理的Bash rsync脚本出错全部内容,希望文章能够帮你解决Bash rsync脚本出错所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: