首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cp以64错误状态退出。

cp以64错误状态退出。
EN

Stack Overflow用户
提问于 2014-09-11 14:54:22
回答 1查看 10.7K关注 0票数 4

我在包制造者中使用了一个飞行前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的状态是什么?我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-11 15:00:13

问题是,您没有一个文件夹Support/app/db用于命令将文件/folder/to/my/db/Library/Application复制到。

将错误的(几乎总是错误的) $*替换为正确的"$@"

代码语言:javascript
运行
复制
run()
{
    "$@"
    code=$?
    [ $code -ne 0 ] && echo "command [$*] failed with error code $code\nERROR: $@\n"
}

普通$*在空格处断词;"$@"在参数中保留空格。最常见的情况是,$*不是正确的表示法(尽管在您使用$@echo中很好)。我不清楚为什么在错误消息中两次列出命令的参数。

通过将>&2添加到末尾以将输出重定向到标准错误,这将改进错误报告,这是错误消息所属的地方。(当我在做的时候,我会删除重复。)注意,在参数$*中使用echo是完全合适的。

代码语言:javascript
运行
复制
    [ $code -ne 0 ] && echo "command [$*] failed with error code $code" >&2

实际上,可以进一步简化run()函数;实际上不需要变量code

代码语言:javascript
运行
复制
run()
{
    "$@" || echo "command [$*] failed with error code $?" >&2
}

如果希望脚本也退出,则可以使用:

代码语言:javascript
运行
复制
run()
{
    "$@" || { echo "command [$*] failed with error code $?" >&2; exit 1; }
}

{ ...; }符号将内部的命令作为一个单元来处理I/O重定向,而不启动子shell。

另见How to iterate over arguments in a Bash script

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25790736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档