SSブログ

まさか!?のパイプ詰まり [Vine Linux]

ここのコメント欄で munepi さんが提案してくれたビルドログのサイズの丸め方を、直に self-build-rpm.sh 叩きながら試していたところ、引数で渡すログサイズを段々小さくしていくと、ある所から rpm パッケージのビルドに失敗するのに気付いた。

なんじゃこりゃ?と思いつつ sh -x のデバッグ出力を眺めながら試行錯誤した結果、こんな事が起きていることが分かった。

ビルドの進捗を zenity で表示する為にスクリプト中でパイプを使って標準出力を渡している所がある。

rpmbuild(1) | tee(2) | percentage(func)(3) | zenity(4)

rpmbuild の出力を tee に渡してログファイルに書き出しつつ、自前の関数 percentage でログサイズとの比率を計算して一定間隔で出力し zenity でプログレスバーを表示する、という流れ。

ここでスクリプトに意図的に小さいログサイズを渡してやると、
- ビルド開始
- zenity がプログレスバーを表示
- 比率が100を越える
- zenity が自動で閉じる
- でもビルド継続
- percentage が比率を計算して出力
- でもパイプの後ろで受け取るプロセスが無い
- エラーで終了~
となりサブシェル全体が落ちるので、rpm のビルドも強制終了されていた。

という事で対策として比率が100を越えたら出力しないように percentage 関数を修正して無事 OK に。

# シェルのパイプが「詰まる」なんて知らなかったので
# 良い勉強になりました。眠かったけど……。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:moblog

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。