出力がどのファイル記述子から出てくるのか、どうすれば確認できますか?

出力がどのファイル記述子から出てくるのか、どうすれば確認できますか?

出力がどのファイル記述子から出てくるのか、どうすれば確認できますか?

$エコこんにちは  
こんにちは  
$エコこんにちは1>&2  
こんにちは

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

答え1

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

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

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

上記の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(上記のように)他の場所にリダイレクトされない限り、現在の端末(あなたの場合)に接続されます。

関連情報