我在包制造者中使用了一个飞行前bash脚本:
run cp -pf "/folder/to/my/db" "/Library/Application Support/app/db
run函数(顺便说一下,我在StackOverflow上找到的):
run() { $*; code=$?; [ $code -ne 0 ] && echo "command [$*] failed with error code $code\nERROR: $@\n"; }
命令cp
返回64段代码。请问这64的状态是什么?我怎么才能解决这个问题?
发布于 2014-09-11 07:00:13
问题是,您没有一个文件夹Support/app/db
用于命令将文件/folder/to/my/db
和/Library/Application
复制到。
将错误的(几乎总是错误的) $*
替换为正确的"$@"
run()
{
"$@"
code=$?
[ $code -ne 0 ] && echo "command [$*] failed with error code $code\nERROR: $@\n"
}
普通$*
在空格处断词;"$@"
在参数中保留空格。最常见的情况是,$*
不是正确的表示法(尽管在您使用$@
的echo
中很好)。我不清楚为什么在错误消息中两次列出命令的参数。
通过将>&2
添加到末尾以将输出重定向到标准错误,这将改进错误报告,这是错误消息所属的地方。(当我在做的时候,我会删除重复。)注意,在参数$*
中使用echo
是完全合适的。
[ $code -ne 0 ] && echo "command [$*] failed with error code $code" >&2
实际上,可以进一步简化run()
函数;实际上不需要变量code
:
run()
{
"$@" || echo "command [$*] failed with error code $?" >&2
}
如果希望脚本也退出,则可以使用:
run()
{
"$@" || { echo "command [$*] failed with error code $?" >&2; exit 1; }
}
{ ...; }
符号将内部的命令作为一个单元来处理I/O重定向,而不启动子shell。
https://stackoverflow.com/questions/25790736
复制相似问题