通常は-e
Bash スクリプトを設定していますが、コマンドを実行して戻り値を取得したい場合もあります。
ダンスをしなくてもset +e; some-command; res=$?; set -e
、どうすればそれができますか?
通常は-e
Bash スクリプトを設定していますが、コマンドを実行して戻り値を取得したい場合もあります。
ダンスをしなくてもset +e; some-command; res=$?; set -e
、どうすればそれができますか?
代替として
ans=0
some-command || ans=$?
ラッパー関数を使用してコマンドを実行します。
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
...