- Published on
Bashで複数のコマンドの出力を1つの出力にまとめる
- Authors
- Name
- Shou Arisaka / 有坂翔
Linuxパソコン・サーバーでのコマンドライン言語Bashにおいて、複数のコマンドの出力を1つの出力にまとめる、また反対に、1つの出力を複数のコマンドに渡す、ということをする方法について紹介します。
コンソールが数千行の出力で汚くなるのは嫌ですよね。 僕は、出力がどれくらいあるのかわからない場合、とりあえずtail -3
をするようにしています。もしくは、head -3
,または,wc
でもいいでしょう。
でも、headとtailを両方やりたい場合とかもありますよね。実際そういう場面って結構あります。headとtailとwcが同時にできたら良いですよね。
(2021年追記: lessが一番よいです。)
1つの出力を複数のコマンドに渡す
cat > hoge.md
hoge
fuga
foo
bar
# cat hoge.md | (head -3; tail -3) # => NG
cat hoge.md | tee >(head -1) >(tail -1)
hoge
fuga
foo
bar
hoge
bar
# => 通常のcatでの出力に加えて、headとtailの出力がそれぞれ後付けされています。
cat hoge.md | tee >(head -1) >(tail -1) 2>&1 1>/dev/null
hoge
bar
# => catの出力を消して、headとtailの出力のみ出力する。
cat hoge.md | tee >(head -1 | wc) >(tail -1 >/dev/null ) 2>&1 1>/dev/null
1 1 5
# => head|wcの出力のみ出力される。
shell - How can I send stdout to multiple commands? - Unix & Linux Stack Exchange
複数のコマンドを1つの出力にまとめる
蛇足的になりますが、複数のコマンドをまとめてやるということもできるみたいです。$ (echo zzz; echo aaa; echo kkk) | sort
aaa
kkk
zzz