Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将动态生成的参数传递给脚本内部的命令_Bash_Parameters_Parameter Passing - Fatal编程技术网

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 错误吗?