66

通常は-eBash スクリプトを設定していますが、コマンドを実行して戻り値を取得したい場合もあります。

ダンスをしなくてもset +e; some-command; res=$?; set -e、どうすればそれができますか?

4

5 に答える 5

15

代替として

ans=0
some-command || ans=$?
于 2013-09-04T19:52:22.027 に答える
-3

ラッパー関数を使用してコマンドを実行します。

function __e {
    set +e
    "$@"
    __r=$?
    set -e
}

__e yourcommand arg1 arg2

そして$__r代わりに使用します$?

if [[ __r -eq 0 ]]; then
    echo "success"
else
    echo "failed"
fi

パイプでコマンドを呼び出す別の方法ですが、パイプを引用する必要があるだけです。これは安全な評価を行います。

function __p {
    set +e
    local __A=() __I
    for (( __I = 1; __I <= $#; ++__I )); do
        if [[ "${!__I}" == '|' ]]; then
            __A+=('|')
        else
            __A+=("\"\$$__I\"")
        fi
    done
    eval "${__A[@]}"
    __r=$?
    set -e
}

例:

__p echo abc '|' grep abc

そして、私は実際にこの構文を好みます:

__p echo abc :: grep abc

私ができること

...
        if [[ ${!__I} == '::' ]]; then
...
于 2013-09-04T19:47:56.030 に答える