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
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 に答える
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 に答える
0

私の解決策:

#!/bin/bash

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

これが役立つことを願っています=)

于 2012-10-11T13:14:20.867 に答える
0

エラーで何が正確に記録されているかについて非常にうるさいわけではなく、常にエラーでスクリプトを終了している場合は、必要なものを達成するための防弾の方法があります

set -e

スクリプトの最初に追加します。

「ヘルプセット」から:

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