
No.3ベストアンサー
- 回答日時:
>たとえば私の場合、次のシェルスクリプトの出力をlessに渡した直後にlessを終了すると、パイプ切断のエラーが発生します。
>#!/bin/sh
>find / | while read FILE
>do
>echo $FILE
>done
CentOS 4.4で試したけど、broken pipeにはなりませんでした。
Leanさん、スクリプト試していただいて、ありがとうございます。
なんと、このエラーは私のリナックスでしか発生しないとは・・・
私のリナックスは、いい加減もう古すぎるということなのでしょうね。
まあOSを入れ替えるかどうかは別として、
新しいOSにすれば、broken pipeも発生しなくなることですし、
このシェルスクリプト自体は何の問題もないということが分かったので満足です。
No.2
- 回答日時:
メッセージが出る状況が再現できないので不確かですが、最初に、
trap exit 13
とパイプ切断シグナルをトラップすればどうでしょうか。
notnotさん、ご回答ありがとうございます。
パイプ切断シグナルなんてものが存在したのですね。
早速試してみたのですが、うまくいきませんでした。
exit以外のコマンドをtrapに記述して試してみたりもしたのですが、
どうも、パイプの切断をキャッチできていないような感じがします。
割り込みシグナルとかは、ちゃんとキャッチできるのです。
たとえば私の場合、次のシェルスクリプトの出力をlessに渡した直後にlessを終了すると、パイプ切断のエラーが発生します。
#!/bin/sh
find / | while read FILE
do
echo $FILE
done
notnotさん、お暇なときに、このスクリプトでもう1回試してもらえないでしょうか。
No.1
- 回答日時:
broken pipeは、プロセスがパイプに書き込みをしようとしたが、パイプから読み込みを行うプロセスがいない時に発生するので、lessを中断するとbroken pipeが発生する状況ならいくら自作シェルでどうこうしようとしてもbroken pipeの発生そのものを防ぐ事は無理なのでは?
ところで何のために
>自作シェルスクリプト | less
というように実行しているのですか?
進行状況等を見るためにlessで止めて見ているなら、ファイルにリダイレクトして、ファイルを見ることで確認するようにすればいいだけでは?
Leanさん、ご返信ありがとうございます。
やはりシェルでどうこうしても無理なのですね。
無理なのであれば、それはそれで仕様と言い張れるので問題ないですねw
ただ、なぜ私がシェルでどうにかできるかもしれないと思ったかというと、例えば
find / | less
とやった直後にlessを終了させた場合、エラーが発生しなかったからです。
だからfindにはパイプが切断されてもエラーにならないような仕組みが施されていると予想したのです。
しかし、今実験して気が付いたのですが
findは私の自作スクリプトよりもはるかに高速だったのです。
lessを終了するよりも前にfindの出力が完了してしまうため、エラーが発生しなかったのだと思いました。
さて、Leanさんが疑問に思っている
自作シェルスクリプト | less
を実行した理由ですが、
普通にテストするときはパイプなんて使わずにシェルスクリプト単体で実行するのですが、
単体で実行していたら頭の方で、気になる表示があって、でも、そのままどんどんスクロールしてしまったので
今度はlessを使って確認してみました。
ファイルに出力する方法も考えられたのですが、自作スクリプトはすごい時間がかかるので、手っ取り早くlessで確認してしまおうと思ったわけです。
あと私の場合、テストでファイルに出力して、消し忘れた場合、紛らわしいファイルがどんどん増えて何が何だか分からなくなってしまうんです~。
testとかtestaとかtestbとか、あやしいファイルがうじゃうじゃいます・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タスクバーの音量アイコンをク...
-
TOPコマンドで表示するCPU使用...
-
System Idle Processってなに?...
-
ときどきCPU使用率が100%になっ...
-
プロセス、サービス、デーモン...
-
Powershell プロセス二重起動
-
CPU使用率取得方法について
-
IE プロセスが消えない
-
NETSTATのコマンドプロンプト画...
-
シェルスクリプトで実行したコ...
-
プロンプトが返らない
-
killコマンドの終了と強制終了...
-
アプリケーションの最大メモリ...
-
Telnetをログアウトしても処理...
-
UNIXのファイルタイプp(...
-
CPU使用率が常に50~10...
-
Dirコマンドでフォルダ内ファイ...
-
ラズパイで『’test.service’をs...
-
SONYの音楽ソフト「x-アプリ」...
-
net use /d の強制実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
プロンプトが返らない
-
タスクバーの音量アイコンをク...
-
System Idle Processってなに?...
-
プロセスがタスクマネージャー...
-
タスクマネージャに表示されな...
-
httpdの子プロセスがゾンビ化す...
-
タスクマネージャのCPU率がおか...
-
コマンドライン上でファイルを...
-
ps コマンドのステータス。S Ss...
-
Powershell プロセス二重起動
-
デーモンモードとは何でしょうか?
-
CPU使用率が常に50~10...
-
linuxでプロセスが動いているCP...
-
Windowsで作れるスレッド最大数...
-
UNIXのファイルタイプp(...
-
アクロバットを終了しても、プ...
-
プロセスがファイルを掴んだま...
-
イラストレータでの透明部分の...
おすすめ情報