ホームページ » の仕方 » エラーがない限り、どのようにバックグラウンドでコマンドを出力せずに実行しますか。

    エラーがない限り、どのようにバックグラウンドでコマンドを出力せずに実行しますか。

    あなたが忙しい人であるならば、あなたが必要とする最後の事は莫大な量の「無駄な」通知に悩まされることですそれであなたはどうやって物事を静めるのですか?本日のSuperUser Q&Aの投稿には、読者がアウトプットの量を減らすのに役立ついくつかの素晴らしい答えがあります.

    本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.

    質問

    SuperUserの読者Xsterは、エラーがない限り、出力なしでバックグラウンドでコマンドを実行する方法を知りたいと思っています。

    どのようにしてコマンドの出力を抑制しますが、コマンドの終了コードにエラーがあるかを表示します。?

    エラーが発生しない限り、どのようにしてコマンドを出力せずにバックグラウンドで実行しますか。?

    答え

    SuperUserの貢献者であるBobとMaximillian Laumeisterが私たちのために答えを持っています。最初に、ボブ:

    残念ながら、 stderr エラー出力にのみ使用され、常に正しいとは限りません。むしろ, stderr すべての対話型出力および診断(つまり、対話型プロンプトで読むことを目的とした出力)によく使用されます。.(1) wget そして dd よく知られた例です.

    いくつかのコマンドはフラグを提供します。. -静か または -サイレント)エラー以外の出力を抑制します。 manページを読んで、存在するかどうかを確認してください。.

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

    あり バッシュ, 最後のコマンドの終了コードは $? 変数。に , 使用 $ステータス 変数。あなたはパイプできます stderr 一時ファイルに保存し、エラーが発生した場合にのみ表示します。例えば ​​():

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

    または

    パイプもできます 標準出力 を使用して同じバッファに 2>&1> / tmp / outputbuffer.

    注意: 私は実際には知りません , それで私はその概念を私がそのドキュメンテーションで見つけることができるものに適応させています。構文は少し間違っているかもしれません。また、使用することができます mktemp 一意の一時ファイルを生成します。実行してファイル名を変数に記録してください。

    対話的にも同時に使用しているすべてのことをシェルのバックグラウンドで実行する必要がある場合は、出力隠蔽を処理するスクリプトを作成し、そのスクリプトを標準的な手法でバックグラウンドで実行することをお勧めします。 ()一体、次の関数のようなものを入れることができます。 〜/ .config / fish / config.fish

    と電話する run-silent somecommand& (末尾が バックグラウンドで実行させます)

    これは元の終了コードを飲み込み、両方をダンプします。 標準出力 そして stderr 失敗した場合必要に応じてカスタマイズできます.

    (1) エラー出力がに表示されないという保証はありません。 標準出力, 一部のプログラムはそこにすべての出力をダンプします!

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

    Maximillian Laumeisterからの回答が続きます。

    Unixユーティリティは一般的なメッセージを 標準出力, とエラーメッセージ stderr, エラーメッセージだけを見たいのであれば、抑制すれば十分です。 標準出力 だからだけ stderr コンソールに出力を取得.

    これを行う方法(両方で) バッシュ そして )を追加することです > / dev / null コマンドに。このパイプ 標準出力 何もしない stderr (あなたのエラーメッセージと)まだコンソールに届く.

    だから例えば:

    コマンド echo 1> / dev / null 何も表示しない 標準出力 出力は抑制され、何も書き込まれませんでした stderr.

    コマンド man doesnotexist> / dev / null エラーメッセージを表示します。 おとこ にエラーメッセージを書き込みます。 stderr.


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