Bash 将动态生成的参数传递给脚本内部的命令
我有一个脚本,它使用一些动态生成的参数调用Bash 将动态生成的参数传递给脚本内部的命令,bash,parameters,parameter-passing,Bash,Parameters,Parameter Passing,我有一个脚本,它使用一些动态生成的参数调用rsync命令,但是我在正确传递这些参数时遇到了问题 以下是一些摘录: logfile="$logDir/$(timestamp) $name.log" echo "something" >> "$logfile" params="-aAXz --stats -h --delete --exclude-from $exclude --log-file=$logfile $src $dest" if [ "$silent" = "" ]; t
rsync
命令,但是我在正确传递这些参数时遇到了问题
以下是一些摘录:
logfile="$logDir/$(timestamp) $name.log"
echo "something" >> "$logfile"
params="-aAXz --stats -h --delete --exclude-from $exclude --log-file=$logfile $src $dest"
if [ "$silent" = "" ]; then
params="-v $params --info=progress2"
fi
rsync $params
如果日志文件是例如/tmp/150507 test.log
,则something
语句实际上写入/tmp/150507 test.log
,但rsync
将其日志写入/tmp/150507
(第一个空格后的所有内容都已删除)
如果我在参数中显式引用日志文件的名称,rsync将抛出一个异常:
params="-aAXz --stats -h --delete --exclude-from $exclude --log-file=\"$logfile\" $src $dest"
错误:
rsync:无法打开日志文件“/tmp/150507:没有这样的文件或目录(2)忽略“日志文件”设置
如何动态生成参数而不丢失在文件名中使用空格的功能?需要更多关于日志文件名的引用:
declare -a params
params=(-aAXz --stats -h --delete --exclude-from "$exclude" --log-file="$logfile" "$src" "$dest")
if [ "$silent" = "" ]; then
params+=(-v "$params" --info=progress2)
fi
rsync "${params[@]}"
这就是你应该考虑使用BASH数组来构成动态命令行的原因。
这不是我在文章的第二部分中提到的(从“如果我明确引用……”开始),它导致了<代码> RSYNC 错误吗?