我正在尝试rsync
从 Bourne shell 脚本执行(阅读:Bash 扩展不可用),经过大量搜索、单引号/双引号组合、转义等,我无法正确传递--out-format='%n'
参数。
例如,这个脚本:
#!/bin/sh
(set -x ; $(rsync -auh --delete --out-format='%n' "$1" "$2")) || exit 1
./myscript.sh dir1/ dir2/
在 MacOS 10.12.6 上调用 like 时会返回此输出:
++ rsync -auh --delete --out-format=%n dir1/ dir2/
+ ./ file1.c file1.h file2.c file2.h
myscript.sh: line 3: ./: is a directory
file1.c
file1.h
file2.c
的file2.h
内容在哪里dir1/
首先,我不知道为什么要+ ./ file1.c file1.h file2.c file2.h
输出该行,因为--out-format='%n'
每行输出一个文件,而不是同一行上的所有文件。此外,神秘的开始./
似乎是错误的原因(或后果)。
如果我--out-format='%n'
从脚本中删除,那么它运行良好,没有错误。
如果我从终端执行命令,它在参数中使用单引号和没有它们(--out-format='%n'
和--out-format=%n
)都可以正常运行。在脚本上时,在两种情况下都失败了。
什么可能导致此错误?
您正在
rsync
命令替换中运行该命令。命令替换将被其中的命令输出替换,并且根据脚本的编写方式,此输出将作为命令执行,这就是您收到错误消息和看似奇怪的跟踪输出的原因。反而:
如果您仍然希望
set -x
在脚本中的子外壳中使用:如果 是脚本中的最后一个命令,
exit 1
则 可能会被删除rsync
,因为脚本的退出状态将是执行的最后一个命令的退出状态,除非无论多么失败都想强制它为 1。rsync