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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows 10のエクスプローラー...
-
プロセス、サービス、デーモン...
-
TOPコマンドで表示するCPU使用...
-
【プログラム】 iu14d2n.tmp ...
-
Gnomeの設定を元に戻したい。
-
alg.exe の役割を教えてください
-
System Idle Processってなに?...
-
ps コマンドのステータス。S Ss...
-
タスクマネージャのCPU率がおか...
-
CPU使用率が常時100%・・・
-
SONYの音楽ソフト「x-アプリ」...
-
Dirコマンドでフォルダ内ファイ...
-
DMMで電子書籍を購入し、ファイ...
-
linux初心者です wineをつかっ...
-
ラズパイで『’test.service’をs...
-
windows10のごみ箱をrd /s /q C...
-
grepでの抽出箇所のみ置換して...
-
信頼済みサイト登録をbatファイ...
-
シェルスクリプトでエラーが出ます
-
tar.bz2ファイルのインストール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
System Idle Processってなに?...
-
タスクマネージャのCPU率がおか...
-
プロンプトが返らない
-
コマンドライン上でファイルを...
-
Windowsで同時にオープンできる...
-
Windowsで作れるスレッド最大数...
-
プロセスがタスクマネージャー...
-
タスクバーの音量アイコンをク...
-
デーモンモードとは何でしょうか?
-
【プログラム】 iu14d2n.tmp ...
-
CPU使用率取得方法について
-
強制終了できないプロセスの強...
-
CPU使用率が常に50~10...
-
アクロバットを終了しても、プ...
-
プロセスの終了について教えて...
-
httpdの子プロセスがゾンビ化す...
-
ps コマンドのステータス。S Ss...
-
イラストレータでの透明部分の...
おすすめ情報