我正在编写 bash 脚本,该脚本在某些部分将通过 ssh 同步文件。不幸的是,我面临着将 rsync 选项保持为变量的问题。请看下面:
# variables
directory="/etc"
backupDirectory="/backup"
incrementalBackup="/incremental"
options="-a -e 'ssh -p 10022' -b --backup-dir=$incrementalBackup --delete"
# rsync
rsync $options user@server:$directory $backupDirectory
不幸的是,上面的脚本失败并出现 rsync 错误:
Unexpected remote arg: user@server:/etc
rsync error: syntax or usage error (code 1) at main.c(1201) [sender=3.0.6]
我在脚本调试过程中看到的事实是,ssh 选项('ssh -p 10022')被视为 rsync 选项。
问题是如何将这些额外的 ssh 设置正确传递到 rsync 中?
预先感谢您的提示。
使用数组;这就是为什么他们被添加到bash
:
# variables
directory="/etc"
backupDirectory="/backup"
incrementalBackup="/incremental"
options=(-a -e 'ssh -p 10022' -b --backup-dir="$incrementalBackup" --delete)
# rsync
rsync "${options[@]}" user@server:"$directory" "$backupDirectory"
eval
不是一个安全的使用选项;它不仅限于评估您想要的报价,而且会评估any代码。它可能适合您当前的情况,但会改变options
可能会带来不可预见的后果,养成使用的习惯通常是一个坏主意eval
当没有必要时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)