プロが教える店舗&オフィスのセキュリティ対策術

自作シェルスクリプト | less
とやったときlessを中断すると
"パイプが切断されました"というエラーが発生します。
恐らく親プロセスの出力が完了する前にlessを終了した場合に発生するのだろうと考えているのですが、自作スクリプトを修正して、このエラーを出さないようにすることはできますか。
自作スクリプトは次のような繰り返し処理になっていて時間がかかるため、中断された場合を考慮した作りにしたいです。
find | while read FILE
do
処理
done

A 回答 (3件)

>たとえば私の場合、次のシェルスクリプトの出力をlessに渡した直後にlessを終了すると、パイプ切断のエラーが発生します。


>#!/bin/sh
>find / | while read FILE
>do
>echo $FILE
>done

CentOS 4.4で試したけど、broken pipeにはなりませんでした。
    • good
    • 0
この回答へのお礼

Leanさん、スクリプト試していただいて、ありがとうございます。
なんと、このエラーは私のリナックスでしか発生しないとは・・・
私のリナックスは、いい加減もう古すぎるということなのでしょうね。
まあOSを入れ替えるかどうかは別として、
新しいOSにすれば、broken pipeも発生しなくなることですし、
このシェルスクリプト自体は何の問題もないということが分かったので満足です。

お礼日時:2006/12/06 22:35

メッセージが出る状況が再現できないので不確かですが、最初に、


trap exit 13
とパイプ切断シグナルをトラップすればどうでしょうか。
    • good
    • 0
この回答へのお礼

notnotさん、ご回答ありがとうございます。
パイプ切断シグナルなんてものが存在したのですね。
早速試してみたのですが、うまくいきませんでした。
exit以外のコマンドをtrapに記述して試してみたりもしたのですが、
どうも、パイプの切断をキャッチできていないような感じがします。
割り込みシグナルとかは、ちゃんとキャッチできるのです。

たとえば私の場合、次のシェルスクリプトの出力をlessに渡した直後にlessを終了すると、パイプ切断のエラーが発生します。
#!/bin/sh
find / | while read FILE
do
echo $FILE
done

notnotさん、お暇なときに、このスクリプトでもう1回試してもらえないでしょうか。

お礼日時:2006/12/05 23:34

broken pipeは、プロセスがパイプに書き込みをしようとしたが、パイプから読み込みを行うプロセスがいない時に発生するので、lessを中断するとbroken pipeが発生する状況ならいくら自作シェルでどうこうしようとしてもbroken pipeの発生そのものを防ぐ事は無理なのでは?



ところで何のために
>自作シェルスクリプト | less
というように実行しているのですか?

進行状況等を見るためにlessで止めて見ているなら、ファイルにリダイレクトして、ファイルを見ることで確認するようにすればいいだけでは?
    • good
    • 1
この回答へのお礼

Leanさん、ご返信ありがとうございます。
やはりシェルでどうこうしても無理なのですね。
無理なのであれば、それはそれで仕様と言い張れるので問題ないですねw
ただ、なぜ私がシェルでどうにかできるかもしれないと思ったかというと、例えば
find / | less
とやった直後にlessを終了させた場合、エラーが発生しなかったからです。
だからfindにはパイプが切断されてもエラーにならないような仕組みが施されていると予想したのです。
しかし、今実験して気が付いたのですが
findは私の自作スクリプトよりもはるかに高速だったのです。
lessを終了するよりも前にfindの出力が完了してしまうため、エラーが発生しなかったのだと思いました。

さて、Leanさんが疑問に思っている
自作シェルスクリプト | less
を実行した理由ですが、
普通にテストするときはパイプなんて使わずにシェルスクリプト単体で実行するのですが、
単体で実行していたら頭の方で、気になる表示があって、でも、そのままどんどんスクロールしてしまったので
今度はlessを使って確認してみました。
ファイルに出力する方法も考えられたのですが、自作スクリプトはすごい時間がかかるので、手っ取り早くlessで確認してしまおうと思ったわけです。
あと私の場合、テストでファイルに出力して、消し忘れた場合、紛らわしいファイルがどんどん増えて何が何だか分からなくなってしまうんです~。
testとかtestaとかtestbとか、あやしいファイルがうじゃうじゃいます・・・。

お礼日時:2006/12/05 22:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!