> で、< で、
こんな場合は
「パイプ(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行だけ表示
そのとおり!こんな風にパイプを活用すればいろんなアイデアを簡単に実現できるよ
お兄ちゃん!これ単純だけどすっごく楽しい!履歴で何回も呼び出せて遊べちゃう!