0

任何人都可以提出以下功能测试的更短的实现(打印相同的错误消息并具有相同的退出状态)?

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

4 回答 4

1

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

function newTest {
    some-command && return 0
    exit_status=$?
    echo "some-command failed with exit status $exit_status" >&2
    return $exit_status
}
于 2012-10-11T13:24:21.010 回答
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 
}
于 2012-10-11T12:54:29.003 回答
0

如果您对错误记录的确切内容不是超级挑剔并且总是在错误时终止脚本,那么实现您需要的防弹方法是

set -e

添加到脚本的开头。

来自“帮助集”:

  -e  Exit immediately if a command exits with a non-zero status.
于 2012-10-11T13:24:07.920 回答
0

我的解决方案:

#!/bin/bash

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

希望这会有所帮助=)

于 2012-10-11T13:14:20.867 回答