-->

CP退出与64错误状态(cp exits with a 64 error status)

2019-10-20 22:35发布

我在packagemaker使用预检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周的状态吗? 我该如何解决?

Answer 1:

问题是,你没有一个文件夹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重定向一个单元而无需启动子壳。


另请参阅如何循环参数在bash脚本 。



文章来源: cp exits with a 64 error status