アカウント名:
パスワード:
2. "| command2"を実行すると、command1 の "stdout管"の出口をcommand2 の0番入口(stdin)につなぎます。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ見習い
管に名前をつけて説明 (スコア:1)
---------------------------------------
○前提
1. コマンドのデータ出口(であるstdoutとstderr)は"管"で出力装置とつながっており、stdout/stderr -> 出力装置の方向にデータが流れます。
2. コマンドのデータ出力は1つの管しかつなげることができません。
3. "管"は入口の数を増やして、複数のものをつなげることができます。
○初期状態
1. command の1番出口(stdout) は "stdout管"という管を使用して
/dev/tty につながっています。
2. command の2番出口(stderr) は "stderr管"という管を使用して
/dev/tty につながっています。
○例1) command1 2>&1 > file の場合
1. "2>&1" を実行すると、command1 の 2番出口(stderr)は、1番出口(stdout)
が使用している"stdout管"を使用します。
具体的には、"stdout管"の入口を1つ増やして
2つにして、2番出口(stderr)を"stdout管"の入口につなぎます。
2. "> file"を実行すると、command1 の 1番出口(stdout)から file に向かって、
新しく管("file管"と命名)が作られます。
"stdout管"の入口はcommand1 の2番出口(stderr)がつながっているのみとなります。
3. したがって、command1 の 1番出口(stdout)は"file管"を通して、 file につながり、
2番出口(stderr)は"stdout管"を通して、 /dev/tty につながることになります。
○例2) command1 2>&1 | command2 の場合
1. "2>&1" を実行すると、command1 の 2番出口(stderr)は、1番出口(stdout)
が使用している"stdout管"を使用します。
具体的には、"stdout管"の入口を1つ増やして
2つにして、2番出口(stderr)を"stdout管"の入口につなぎます。
2. "| command2"を実行すると、command1 の "stdout管"の出口をcommand2 の0番入口(stdin)につなぎます。
3. したがって、command1 の1番出口(stdout)と2番出口(stderr)は"stdout管"を通して、
command2の0番入口(stdin) につながることになります。
Re:管に名前をつけて説明 (スコア:1)
誤
2. コマンドのデータ出力は1つの管しかつなげることができません。
正
2. コマンドのそれぞれのデータの出口は1つの管しかつなげることができません。
Re:管に名前をつけて説明 (スコア:1)
○例3) command1 > file 2>&1 の場合
1. "> file"を実行すると、command1 の 1番出口(stdout)から file に向かって、
新しく管("file管"と命名)が作られます。
2. "2>&1" を実行すると、command1 の 2番出口(stderr)は、1番出口(stdout)
が使用している"file管"を使用します。
具体的には、"file管"の入口を1つ増やして
2つにして、2番出口(stderr)を"file管"の入口につなぎます。
3. したがって、command1 の 1番出口(stdout)と2番出口(stderr)は"file管"を通して、 file につながることになります。
Re:管に名前をつけて説明 (スコア:1)
を追加したほうがよいかと(今回の例では不要でもどうにかなりますが)。
やはりこれに収斂するんでしょうね。
『> は管の「入口」を、 | は管の「出口」を操作しているのだ』
と「管」に対する操作を中心とした説明にしないと、説明が難しい。
fjの教祖様
Re:管に名前をつけて説明 (スコア:1)
書いていて思ったのですが、この説明を聞いた初心者が、
エラー出力だけをパイプで別プロセスに流そうとして、
command1 2| command2
と書いて失敗してなぜなんだろうと思いそうです。
#実際には command1 2>&1 > $SSH_TTY | command2 のように書かないといけない?