私が作ったら
svn log | head
10番目の出力行の後にエラーメッセージが表示されます。
svn: Write error: Broken pipe
ここで何が起こっているのでしょうか?私はそれと一緒に使用された他のコマンドを見たことがありませんhead
。 SubversionはUnixフィルタリングパラダイムには適していませんか?
ベストアンサー1
反対側の端が閉じたパイプに書き込まれると、通常はSIGPIPEシグナルを受けて死にます。ただし、以前のようにシグナルを無視することを選択した場合は、svn
戻ってwrite
英語の翻訳を「Broken Pipeline」に設定してください-1
。標準出力に何かを書き込むことができない場合は、対応するエラーメッセージを表示するように選択します。errno
EPIPE
svn
head
入力に10行を書き込んで終了し、パイプを閉じます。svn
もうパイプには何も書けません。 SIGPIPEが無視されない場合、ほとんどのアプリケーションはデフォルトの動作で自動的にシャットダウンされます。何らかの理由で(おそらく死ぬ前に追加の作業を行う必要があるため)、SIGPIPEを無視することを選択し、svn
パイプのエラー状態を確認してパイプに書き込むことができないと判断します。write
同じエラーが発生します。
bash -c 'trap "" PIPE; while echo foo; do :;done' | head
望むより:
strace -e write seq 10000 | head
(Linuxの場合)SIGPIPEを無視しないときのデフォルトの動作を確認してください。