シェル機能を使用せずに終了コードを抑制

シェル機能を使用せずに終了コードを抑制

シェル関数を使用したり、シェルを起動せずに引数として提供された他のコマンドの終了コードを無効にできる標準コマンドはありますか?

system()呼び出された終了コードに基づいて操作を実行するプログラムがあります。終了コードを介してステータスを返す他のプログラムがあります。しかし、私が呼び出すプログラムは私が望むものと反対の結果を返します。簡単に次のように指定することもできますが、bash -c '....'より簡単な方法はありますか?

PSはい、おそらくそれほど重要ではないものを最適化しようとしていることを知っています。しかし、ほとんどの場合、Unixがほとんどすべてのコマンドを持っているようで、単純な負の終了コードコマンドが見つからないのはなぜですか?

答え1

AFAIK標準ツールセットにはありません。標準ツールセットにあるものsh(およびそのもの!)が必要なものに最も近いです。

system("sh", "-c",  "! \"$0\" \"$@\"", "cmd", "arg1", "arg2"...)

コマンドを実行できる他のツールには、この機能(find、env、xargs...)がないか、シェル自体を呼び出す(ed、awk...)コマンドを実行します。

uniceの初期バージョンには "if"コマンドがありましたが、Bourneシェルが拡張制御ステートメントをインポートすると、このコマンドは消えました。

答え2

この試み:

[ ! `<yourFirtsCommand>` ]

あなたのコマンドに置き換えてください<yourFirtsCommand>。正しい引用符を使用することをお勧めします!
[]関連の問題を回避するには、次のものを使用できます。

test ! `<yourFirtsCommand>`

関連情報