gpt4 book ai didi

bash:rsync 选项作为变量

转载 作者:行者123 更新时间:2023-11-29 09:02:00 24 4
gpt4 key购买 nike

我正在编写 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 不是一个安全的选择;它不仅限于评估您打算评估的引文,还可以评估任何 代码。它可能适用于您当前的情况,但更改 options 的值可能会带来无法预料的后果,并且养成使用 eval 的习惯通常是个坏主意没有必要。

关于bash:rsync 选项作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19219774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com