处理Bash中的退出状态

时间:2012-10-11 12:52:01

标签: bash

任何人都可以提出下面的函数 test 的更短实现(打印相同的错误消息并具有相同的退出状态)?

function test
{
   some-command
   exit_status=$?
   if [ $exit_status -ne 0 ]; then
      echo "some-command failed with exit status $exit_status" >&2
   fi
   return $exit_status
}

4 个答案:

答案 0 :(得分:1)

some-command || echo "some-command failed with exit status $?" >&2

如果要捕获并返回退出状态,请执行

function test { 
   some-command || r=$? && echo "some-command failed with exit status $r" >&2 && return $r 
}

答案 1 :(得分:1)

如果命令成功,则立即返回。然后,如果你还没有回来,你知道有一个错误。这消除了对if语句的需要。

function newTest {
    some-command && return 0
    exit_status=$?
    echo "some-command failed with exit status $exit_status" >&2
    return $exit_status
}

答案 2 :(得分:0)

我的解决方案:

#!/bin/bash

test () {
    "$@" || eval "echo '$1 failed with exit status $?' >&2; exit $?" 
}

希望这有助于=)

答案 3 :(得分:0)

如果你对错误记录的内容并不总是挑剔,并且总是在错误时终止脚本,那么实现你需要的防弹方式就是

set -e

添加到脚本的最开头。

来自"帮助设置":

  -e  Exit immediately if a command exits with a non-zero status.