$?
テスト後に最後のコマンドの終了ステータス()を変更しないでおくことは可能ですか?
例えば、私はしたいと思います:
command -p sudo ...
[ $? -ne 1 ] && exit $?
最後exit $?
はsudo終了ステータスを返す必要がありますが、代わりに常に0
(テストの終了コード)を返します。
一時変数なしでそれを行うことは可能ですか?
さらに明確にする別の例:
spd-say "$@"
[ $? -ne 127 ] && exit $?
この場合、最初のコマンドが見つかった場合にのみ終了します(終了コード!= 127
)。そして、私は実際のspd-say
終了コードで終了したいです(それはそうではないかもしれません
0
)。
編集:私は、移植性を高めるためにPOSIX準拠のソリューションを好むことを忘れていました。
同じコマンドの代替手段を提供したいスクリプトでこの構成を使用します。たとえば、私のcrc32スクリプトを参照してください。
一時変数の問題は、他の変数を隠してしまう可能性があり、長い名前を使用しなければならないことを回避することです。
[ $? -ne 127 ] && exit $?
)
sudo
コマンドが成功した場合(つまり、sudo
ステータス0で終了する場合)にスクリプトを終了する必要があります。しかし、あなたのコードでは、成功した場合、スクリプトは実行を継続します(終了しません)sudo
command
、まったくsudo
ではないことにかなり確信しています。が何を意味するかそれの私が(!終了コードを= 127)最初のコマンドが見つかった場合にのみ終了したいとあるために指定された戻りcommand
、それが起動するコマンドが見つからない場合。問題はsudo
、テストの一部として呼び出すことで、最初からのsudo
リターンを押しつぶして、テストをゆがめることができることだと思いcommand
ます。
if ! command -p sudo; then exit; fi
あなたの例で同じ結果になるだろうことをすることができます。