パイプ処理における問題といえば、例のcat file | while readの同一変数が別コンテキストになる問題でしょ?と思われたかもしれないですが、それとはまた別のお話でして。 上記のコードを実行すると、画面上には1~10が表示されます。 パイプ前段のプロセスが無限に標準出力する場合でも、パイプ後段のプロセスが必要な結果だけ取得できれば事足りるので、前段プロセスが愚直に最後まで計算を続けたりする必要はない。これはかしこい。 ただ、このようなイケてる遅延評価があだとなり、結果的に、ユーザの思惑に反する挙動をしてしまうケースもあります。 例えば以下のコードの場合、書かれてある通りに解釈すれば、本来ファイルにはi=99まで出力されてしかるべきなんですが、実行してみるとi=15までしか出力されませんでした。 i=16を書き込もうとしたタイミングで、書き込もうとしたパイプが後段プロセスによってク
![パイプ処理における遅延評価の問題(SIGPIPE問題) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/91723560ac446a16d5827f0ddbae750d3669aab8/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgzJTkxJUUzJTgyJUE0JUUzJTgzJTk3JUU1JTg3JUE2JUU3JTkwJTg2JUUzJTgxJUFCJUUzJTgxJThBJUUzJTgxJTkxJUUzJTgyJThCJUU5JTgxJTg1JUU1JUJCJUI2JUU4JUE5JTk1JUU0JUJFJUExJUUzJTgxJUFFJUU1JTk1JThGJUU5JUExJThDJUVGJUJDJTg4U0lHUElQRSVFNSU5NSU4RiVFOSVBMSU4QyVFRiVCQyU4OSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9NmU5YmVhMGQzZjU5YzBlMTIxNzc0NjMzMjc2OGQxYWI%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB5ejJjbSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9N2M5M2I5Nzg1YzYxODIyY2Q5ODcxNDhmMjc5MzMwMTI%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D0708ab97b5ddd789a7438d0f0312b83f)