Linux rsync的脚本应该带有引号
我想将文件夹重新同步到另一台计算机。sshpass不是一个选项,证书也不是。所以我一直在期待 到目前为止,我已经有了这个bash脚本(最小化) 不知何故,-e选项周围的引号消失了,但exclude仍然保留着它们 所以我逃避引用Linux rsync的脚本应该带有引号,linux,bash,tcl,expect,rsync,Linux,Bash,Tcl,Expect,Rsync,我想将文件夹重新同步到另一台计算机。sshpass不是一个选项,证书也不是。所以我一直在期待 到目前为止,我已经有了这个bash脚本(最小化) 不知何故,-e选项周围的引号消失了,但exclude仍然保留着它们 所以我逃避引用 expect <<EOF set timeout -1 spawn rsync -e \"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\" \ -
expect <<EOF
set timeout -1
spawn rsync -e \"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\" \
-aHv --exclude=".*/" --delete ../.. ${USER}@${IP}:~/destination
expect "password: "
send "${PASSWORD}\n"
expect eof
EOF
请注意,当直接在终端中键入命令时,该命令本身工作正常
我也尝试过不同的方法,比如“EOF”heredoc和通过环境传递变量,但总是得到不同种类的错误消息:-)
如何转义rsync命令以使其正常工作?Tcl的语法(因此Expect的语法)与shell的语法不同。特别是引用规则不同,;你不需要在单词中间加双引号,因为TCL不会为你扩展GLUB字符(如果你想要的话,你需要显式地调用<代码> GOLB。这意味着您的spawn
命令实际上最好编写为:
spawn rsync -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
-aHv --exclude=.*/ --delete ../.. ${USER}@${IP}:~/destination
# ☝☝☝☝☝☝ LOOK HERE!
如果你想的话,你可以省略注释…即使在一行上也不起作用。
expect <<EOF
set timeout -1
spawn rsync -e \"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\" \
-aHv --exclude=".*/" --delete ../.. ${USER}@${IP}:~/destination
expect "password: "
send "${PASSWORD}\n"
expect eof
EOF
Missing trailing-" in remote-shell command.
spawn rsync -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
-aHv --exclude=.*/ --delete ../.. ${USER}@${IP}:~/destination
# ☝☝☝☝☝☝ LOOK HERE!