回答編集履歴

1

出力の違いを記載

2018/10/02 04:30

投稿

dice142
dice142

スコア5158

test CHANGED
@@ -1,3 +1,39 @@
1
1
  入出力の指定があるかないかの違いです。
2
2
 
3
3
  前回の質問と同じな気がしますが、何がわからないのでしょう?
4
+
5
+
6
+
7
+ ---
8
+
9
+
10
+
11
+ > 1つめのコードを実行すると複数行に渡ってバージョン情報を出力するのに対し、2つめのコードを実行するとバージョン情報の最初の一行が出力されるようでした。/dev/null に入出力の指定をするとなぜこれが変化するのでしょうか?
12
+
13
+
14
+
15
+ 入出力指定の問題ではなく、`2>&1`があるかないかの違いになります。
16
+
17
+ 出力は「標準出力」「標準エラー出力」があり、リダイレクト(`>`)やパイプ(`|`)では
18
+
19
+ 基本的に「標準出力」のみ効果があります。
20
+
21
+ このとき、**標準出力**された部分はリダイレクト先のファイルやパイプ後のコマンドで処理されますが、
22
+
23
+ **標準エラー出力**された部分はそのまま画面内に出力されます。
24
+
25
+
26
+
27
+ `bzip2 --version`は標準エラー出力でバージョン情報を出力しているようなので、
28
+
29
+ `| head -n1`という処理に関係なくすべて出力されます。
30
+
31
+
32
+
33
+ `bzip2 --version 2>&1`は「標準エラー出力」を「標準出力」に統合して出力するので、
34
+
35
+ 要は**全て標準出力**として表示しています。
36
+
37
+ そのため`| head -n1`に出力結果が渡され、1行目のみ出力されます。
38
+
39
+ ※`head -n1`は渡されたデータの1行目までを出力するコマンドです。