如何发送带有消息的命令以在成功时回显到 bash 函数?

How do I send a command with a message to echo on success to a bash function?

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

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

假设我要执行以下命令并出现给定错误:

assert_success <command> <error_message>

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

assert_success $(mkdir blah) "This worked"

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

如何让 echo 在此处正常工作?

问题出在这个调用中:

assert_success $(mkdir blah) "This worked"`

您正在 传递 mkdir 命令 的输出,而不是 mkdir 命令本身。由于 mkdir 的输出是空的,并且它是 unquoted "This worked" 在你的函数中变成 </code> 并且你得到错误:<code>This worked: command not found

我建议你有这样的功能:

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

并将此函数称为:

assert_success "This worked" mkdir blah

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

mkdir blah && echo "This worked"

assert_success "mkdir blah" "This worked"

或anubhava的解决方案

assert_success "This worked" mkdir blah