web-dev-qa-db-ja.com

どのファイル記述子出力から出力されているかを確認するにはどうすればよいですか?

どのファイル記述子出力から出力されているかを確認するにはどうすればよいですか?

 $ echo hello 
 hello 
 $ echo hello 1>&2 
 hello 

すべて/ dev/pts/0に移動します
しかし、3つのファイル記述子があります0,1,2

4
Akhil Jalagam

通常の出力はファイル記述子1(標準出力)で発生します。診断出力とユーザー操作(プロンプトなど)はファイル記述子2(標準エラー)で発生し、入力はファイル記述子0(標準入力)でプログラムに入ります。

標準出力/エラーの出力例:

echo 'This goes to stdout'
echo 'This goes to stderr' >&2

上記のどちらの場合も、echoは標準出力に書き込みますが、2番目のコマンドでは、コマンドの標準出力が標準エラーにリダイレクトされます。

出力チャネルの一方または他方(または両方)をフィルタリング(削除)する例:

{
    echo 'This goes to stdout'
    echo 'This goes to stderr' >&2
} >/dev/null   # stderr will still be let through

{
    echo 'This goes to stdout'
    echo 'This goes to stderr' >&2
} 2>/dev/null   # stdout will still be let through

{
    echo 'This goes to stdout'
    echo 'This goes to stderr' >&2
} >/dev/null 2>&1   # neither stdout nor stderr will be let through

出力ストリームは現在の端子に接続されています(/dev/pts/0あなたの場合)、上記のように他の場所にリダイレクトされない限り。

4
Kusalananda