エラーがなければ、出力なしでバックグラウンドでコマンドをどのように実行しますか?

あなたが忙しい人であれば、最後に必要なのは膨大な量の「役に立たない」通知に悩まされることです。どうすれば物事を鎮圧しますか?今日のスーパーユーザQ&Aの投稿には、読者が出力の量を抑えるのに役立ついくつかの大きな回答があります。

今日の質疑応答セッションは、Q&Aウェブサイトのコミュニティ主導型のグループである、スタック交換の細分化であるスーパーユーザーからの礼儀です。

スーパーユーザーリーダーXsterは、エラーがなければ、出力なしでバックグラウンドでコマンドを実行する方法を知りたい

コマンドの出力を抑止する方法はありますが、コマンドの終了コードにエラーがある場合はそれを表示しますか?

エラーがなければ、出力なしでバックグラウンドでコマンドを実行するにはどうすればよいですか?

スーパーユーザの貢献者BobとMaximillian Laumeisterは私たちの答えを持っています。最初に、ボブ

残念ながら、stderrがエラー出力のためだけに使用されるという仮定は必ずしも正しいとは限りません。むしろ、stderrは、すべてのインタラクティブな出力と診断(つまり、ユーザがインタラクティブなプロンプトで読むことを意図した出力)によく使われます。 (1)wgetとddはよく知られている例です。

コマンドによっては、エラーのない出力を抑止するためのフラグ(-quietまたは-silent)があります。それらのマニュアルページを読んで、存在するかどうかを調べます。

より頻繁に保持するもう1つの規則は終了コードであり、プログラムは終了時に終了コードを返します。通常(2)、終了コード0は成功を示し、その他の終了コードはエラーを示します。

bashを使うと、最後のコマンドの終了コードを$から得ることができます。変数。魚では、$ status変数を使用します。 stderrは一時ファイルにパイプすることができ、エラーが発生した場合にのみ印刷します。例えば(魚)

コマンドを連結していない場合は、いくつかのショートカットを使用することもできます

または

2>&1> / tmp / outputbufferを使用して、stdoutを同じバッファにパイプすることもできます。

(注:私は実際に魚を知っているわけではないので、私はそのドキュメントの中で見つけたものにコンセプトを適用しています。構文は多少間違っているかもしれません。変数内のファイル名。)

対話的に同時に使用しているシェルのバックグラウンドですべてを実行する必要がある場合は、標準的な手法を使用してバックグラウンドでそのスクリプトを出力非表示にして実行する方がよいでしょう(魚)。ああ、あなたは〜/ .config / fish / config.fishに次のようなものを置くことができます

run-silent somecommandで呼び出し(&が後ろに&をバックグラウンドで実行させる場所)

これは元の終了コードを飲み込み、失敗した場合にstdoutとstderrの両方をダンプすることに注意してください。必要に応じてカスタマイズすることができます。

(1)エラー出力がstdoutに出力されないという保証はありません。プログラムによっては、出力をすべてダンプするプログラムもあります。

(2)残念ながら、これは必ずしもそうではありません。終了コードはプログラムによって完全に制御され、いくつかはゼロ以外の終了コードでいくつかの成功条件が示されます。再度、マニュアルを確認してください。

Maximillian Laumeisterの答えが続く

Unixユーティリティはstdoutに一般メッセージを送信し、エラーメッセージはstderrに送信するので、エラーメッセージのみを表示したい場合はstdoutを抑止してstderrだけをコンソールに出力するようにしてください。

これを行う方法(bashとfishの両方)は、> / dev / nullをコマンドに追加することです。このパイプは無駄になっていますが、stderr(エラーメッセージ付き)はまだコンソールに届きます。

だから例えば

コマンドecho 1> / dev / nullは、通常のstdout出力が抑制され、何もstderrに書き込まれなかったので何も表示しません。

コマンドman doesnotexist> / dev / nullは、エラーメッセージをstderrに書き込むため、エラーメッセージを出力します。

説明に追加するものがありますか?コメントの音がする。他の技術に精通したStack Exchangeユーザーからの回答をもっとたくさん読んでみたいですか?ディスカッションスレッド全体をチェックしてください。

サンフランシスコ湾は海岸からかなり奥深く見えますが、平均的な深さは約12-15フィート(いくつかの裏庭プールほど深い)です。