将动态生成的参数传递给脚本

时间:2015-05-07 10:49:57

标签: 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" = "" ]; then
    params="-v $params --info=progress2"
fi
rsync $params

如果日志文件是例如/tmp/150507 test.log something语句实际写入/tmp/150507 test.log,但rsync将其日志写入/tmp/150507(删除第一个空格后的所有内容)。

如果我在params中明确引用了日志文件的名称,rsync会引发异常:

params="-aAXz --stats -h --delete --exclude-from $exclude --log-file=\"$logfile\" $src $dest"

错误:

  

rsync:无法打开日志文件" / tmp / 150507:没有此类文件或目录(2)
  忽略"日志文件"设置。

如何在不失去在文件名中使用空格的情况下动态生成参数?

1 个答案:

答案 0 :(得分:1)

日志文件名称需要更多引用:

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数组来构成动态命令行。

相关问题