yes | rm * の謎。
yes | rm * でファイルを一気に消したりするのですが、終了時の動きが気になっています。
なぜrmが終わったタイミングでyesもおわるのでしょうか。
パイプでつなぐ場合、プロセスは一気に立ち上げられ、左側のプロセスが終われば、右側のプロセスが終わるという認識です。
しかし、 yes | rm * は逆になります。右側(rm)が終われば、 左側(yes) が終わります。
###試したこと
パイプの右側が終わっても、左側が終わらないことを、試してみました。
↓作成したシェルスクリプトです。
[piyo@hoge tmp]# tail test* ==> test1.sh <== sleep 1 echo "exit test1" >&2 ==> test2.sh <== sleep 10 echo "exit test2" >&2
※パイプに渡さないように標準エラー出力に出しています。
↓試行結果です。
[piyo@hoge tmp]# ./test1.sh | ./test2.sh exit test1 exit test2 [piyo@hoge tmp]# ./test2.sh | ./test1.sh exit test1 exit test2
両方ともtest2.sh が終わったタイミングでシェル操作が可能になりました。
やはり、左が終わってから右が終わっているように思えます。
どなたか仕組みを教えていただけないでしょうか。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/06 01:06