標準出力を閉じる(>&-) [閉じる]

標準出力を閉じる(>&-) [閉じる]

端末で起動されたGUIプログラムがコンソールに書き込まれないようにしてください。これを実行しますguiprogram >&-。これにより、特定のジョブに対してプログラムが停止します。

オペレータは正確に何をしますか>&-?これの目的は何ですか?いくつかの例を挙げることができますか?コンソールを使用してコンソールへの書き込みをブロックするのは合法的ですか?標準出力を閉じるとプログラムが停止するのはなぜですか?

答え1

プログラムの出力がどこにも表示されないようにするには、次にリダイレクトします/dev/null

guiprogram >/dev/null 2>&1

stdout閉じるは、プログラムが閉じたファイルで何をすべきかを知っている場合にのみ機能します。

実際にはほとんど使用されていませんが、>&-後で別の出力先を割り当てて元の出力チャネルが正しく閉じられていることを確認したい場合にstdout使用できます。

答え2

プログラムが停止する理由を知るには、ソースコードを見てください。また、問題が中断、クラッシュ、または無視される可能性があります。

bash -c 'exec >&-; echo foo; echo bar >&2'
    bash: line 0: echo: write error: Bad file descriptor
    bar

このシェルコードはこの問題を無視します。

bash -c 'set -e; exec >&-; echo foo; echo bar >&2'
    bash: line 0: echo: write error: Bad file descriptor

エラーのためシェルコードがハングしました。

一部のロギング機能に「成功するまで繰り返し」ループがある場合、停止が発生する可能性があります。ファイル記述子1への書き込みが失敗し、プログラムが無限ループに陥るため、これは決して起こりません。

関連情報