>
で、<
で、
こんな場合は「パイプ(pipe)」が使えるよ
コマンド同士が直接入出力をやりとりするんだ
え?
私がやろうとしていたような
入出力内容を仲介するファイルを
作らなくても済むの?
パイプはコマンドの出力を
別のコマンドの入力に渡す仕組みだよ
2つのコマンドの間に
「パイプ、バーチカルバー ( を
置くだけだよ
|
)」コマンド1 | コマンド2
へぇ!そんなことができるんだ!なんだか面白そう!
yes
は指定された文字列を出力し続けるよyes [文字列]
文字列の指定がなければ
yes
を出力するよさっそく yes
を実行してみよう!yes
うん!
yes
yes
yes
...
うわっ!yes の出力が止まらなくなっちゃったよ!どうしよう?!
落ち着いて「割り込み(interruption)」操作を使おう キーボードから Ctrl + C を押してみてこれで今動いているコマンドを強制的に停止できるよ
…あ、止まった! 良かったぁ…
でもこの
yes
コマンド単体だと使い道がなさそうだよ確かに
yes
単体では便利に見えないかもねこのコマンドはパイプと組み合わせるために用意されているんだここでパイプが登場するのね!
たまに「yes / no」の確認を 求めるコマンドがあるよね
うん、あるよ 親切だけど手入力しないといけないから操作がどうしても遅くなっちゃうね
例えば 「削除してよいか」の確認を取るようになるんだ これを確認を求めるコマンドの代わりだと思ってね
rm
に -i
オプションを指定するとそんなコマンドと
yes
を組み合わせて以下のように書くとどう思う?yes | rm -i /home/midori/*
えっと…確認が全部「yes」って 自動で答えてくれるってこと?
そのとおり!確認作業を自動化できるんだ
すごい!それなら役に立ちそう!
Linux の基本的な考え方に「単純なコマンドを組み合わせて複雑な処理を作る」 というものがあるんだ
その中心がパイプなんだ使いこなせるようになればもっと自由にコマンドを操作できるようになるよ
今回はパイプを学んだよ!コマンド同士の入出力をつなげられるんだ!
パイプはいくつもつなげられるよ!以下のコマンドが何をするのか考えてみて
cat << EOF | shuf | head -n 1
大吉
中吉
中吉
小吉
小吉
小吉
吉
吉
吉
吉
EOF
shuf
は行をランダムに並び替えるよshuffle の略なんだhead
の -n
オプションは指定された行数だけ表示するんだこれは…おみくじ?!
cat
とヒアドキュメントで複数行を生成shuf
で行をランダムに並び替えhead -n 1
で先頭の1行だけ表示
そのとおり!こんな風にパイプを活用すればいろんなアイデアを簡単に実現できるよ
お兄ちゃん!これ単純だけどすっごく楽しい!履歴で何回も呼び出せて遊べちゃう!