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で質問しましょう!
似たような質問が見つかりました
- 電子マネー・電子決済 QUICPayの登録ができない。 4 2023/06/10 10:57
- 仕事術・業務効率化 工場の保全経験2年の者です。 最近新らに就職した会社が、設備保全の仕事が部者人員が上司除いて自分一人 3 2023/02/12 15:34
- 輸入車 BMW2シリーズ アクティブツアラーの警告表示について 2016年製 走行39000km 2022年 2 2022/11/15 07:54
- ヤフオク! ヤフーかんたん決済について教えて下さい。 落札者になります。 商品を落札し、かんたん決済でクレジット 1 2023/03/18 00:30
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- 哲学 大学で哲学の講義を履修しているのですが、さっぱり内容が分かりません。真面目に講義は受けているつもりで 1 2022/05/28 18:16
- 派遣社員・契約社員 これて契約違反になる? 契約書に書かれている作業場と今実際今の入ってる作業場全く違います。仕事内容に 3 2022/09/15 22:12
- 外国株 NISAで利益が出ている株の売却について 7 2023/08/17 10:37
- 仕事術・業務効率化 IF関数で時間指定をして、数値を切り上げたいです 1 2022/05/01 23:37
- 派遣社員・契約社員 皆さんの意見アドバイスいただけると嬉しいです。 自分はとある工場で働いていて自分は派遣スタッフで自分 1 2022/08/24 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
プロンプトが返らない
-
タスクマネージャのCPU率がおか...
-
タスクバーの音量アイコンをク...
-
System Idle Processってなに?...
-
タスクマネージャで終了できな...
-
Windowsホストプロセス Rundll...
-
コマンドライン上でファイルを...
-
CPUが突然100%
-
強制終了できないプロセスの強...
-
今日から急にPCが重くなりま...
-
PowershellのInvoke-RestMethod...
-
systemのCPU使用量が一瞬極端に...
-
パソコンが急に重くなる
-
sighupとsigtermの違い
-
MAC OS10.5.8で「予期しない理...
-
CPU使用率100%
-
shutdown時にGDI+のメッセー...
-
多重処理(マルチプロセシング...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
タスクバーの音量アイコンをク...
-
タスクマネージャのCPU率がおか...
-
CPU使用率が常に50~10...
-
System Idle Processってなに?...
-
コマンドライン上でファイルを...
-
Windowsで作れるスレッド最大数...
-
タスクマネージャで終了できな...
-
プロンプトが返らない
-
ps コマンドのステータス。S Ss...
-
プロセスがタスクマネージャー...
-
Powershell プロセス二重起動
-
【プログラム】 iu14d2n.tmp ...
-
Windowsで同時にオープンできる...
-
Windows 10のエクスプローラー...
-
ネットワーク使用率約75%維持状...
-
httpdの子プロセスがゾンビ化す...
-
IE プロセスが消えない
-
linuxでプロセスが動いているCP...
おすすめ情報