1

我编写了一个函数来检查命令是否成功执行,如果没有,则抛出错误。

assert_success () {
    "$1"
    if [[ $? == 0 ]]; then
        echo "$2"
    fi
}

假设我有以下命令要执行给定的错误:

assert_success <command> <error_message>

所以基本上,类似于以下内容:

assert_success $(mkdir blah) "This worked"

但是,我得到a.sh: line 3: This worked: command not found

我怎样才能在echo这里正常工作?

4

2 回答 2

1

问题在于这个电话:

assert_success $(mkdir blah) "This worked"`

您正在传递mkdircommand的输出,而不是mkdir命令本身。并且由于输出mkdir为空且未引用 "This worked",因此在您的$1函数内部,您会收到错误:This worked: command not found

我建议你有这样的功能:

assert_success () {
   msg="$1"
   shift
   if $@; then
      echo "$msg"
   fi
}

并将此函数称为:

assert_success "This worked" mkdir blah
于 2015-12-03T05:56:07.337 回答
1

除了我评论中链接中讨论的问题外,不需要这样的功能。简单地运行您的命令,然后使用&&操作符打印成功消息会更短。相比

mkdir blah && echo "This worked"

assert_success "mkdir blah" "This worked"

或anubhava的解决方案

assert_success "This worked" mkdir blah
于 2015-12-03T12:37:07.490 回答