- ベストアンサー
bashでfold整形後のリダイレクト方法について
- bashでのexecコマンドのリダイレクト方法について質問があります。execコマンドでのログ出力を整形してリダイレクトしたい場合、foldコマンドを使用することができますが、ファイル出力した場合に全てのログが出力されない問題が発生しました。リダイレクトされたファイルに標準出力と同期して全てのログを出力させる方法はありますか?
- bashでのexecコマンドのリダイレクト方法について質問があります。foldコマンドを使用してログの整形を行った後、ファイルにリダイレクトするとログの一部が欠けてしまいます。全てのログをファイルに出力させる方法はありますか?
- bashでのexecコマンドのリダイレクト方法についてアドバイスをいただきたいです。ファイルへのリダイレクト時にログが途中で切れてしまい、全てのログが出力されません。ログを完全にファイルに出力させる方法はありますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
意味が最初わからなかったのですが、execとお書きなのはシェルの組み込みコマンドのexecでなくて、実際にはexecではないプログラム名称を書き換えてexecとお書きなのですね。 (例示であればfooだとかhogeだとかの方が良いです) No1の方がお書きのようにバッファリングの問題であるなら(プログラムを終了させるとちゃんとファイルに出力されるのなら)、バッファリングしない(もしくは行単位でバッファリングする)プログラムを使うしか無いですね。 OSは何でしょう?Linuxではなさそうですが。 折り返しだけなら自分でCでプログラムを書くというのもありそうです。 あとは、そのままファイルに書いて、viで開く前にfoldするとか。
その他の回答 (1)
- dscripty
- ベストアンサー率51% (166/325)
fold はバッファをコントロールするオプションがないみたいだね。 http://linuxjm.sourceforge.jp/html/GNU_textutils/man1/fold.1.html sed なら -u オプションでバッファを抑制できるよ。 [sed --help より抜粋] | -u, --unbuffered | load minimal amounts of data from the input files and flush | the output buffers more often exec | sed -nru ' :continue /^.{0,256}$/{ p d } h s/^(.{256}).*$/\1/p g s/^.{256}(.*)$/\1/ b continue ' > server.log
お礼
教えてgooの操作になれておらず、補足に入力しておりました。すいません。 回答ありがとうございました。
補足
タイトルでも「bashで」と記述していたにも関わらず、使用しているシェルはPOSIXシェルでした。 大変申し訳ございません。。。 POSIXシェルにはsedにuオプションが無いようで(manで見る限り、他のバッファリングをコントロールするオプションも見当たらず…)いただいた回答を実現することが出来ませんでした。
お礼
教えてgooの操作になれておらず、補足に入力しておりました。すいません。 回答ありがとうございました。
補足
回答ありがとうございます。 > 例示であればfooだとかhogeだとかの方が良いです ご指摘ありがとうございました、以降気をつけます。 > OSは何でしょう? HP-UX 11.31です。 > バッファリングしない(もしくは行単位でバッファリングする)プログラムを使うしか無いですね。 perlで以下のようなプログラムを挟むことで、バッファリングを回避してログ出力することができました。 exec | perl -ne '$|=1;while(<STDIN>){print if (length($_)<256);}' > server.log (整形とは違いますが、面倒だったんで256文字以上は排除しました) 外部コマンドを使うのは少し抵抗があったんですが、やはりこのようなケースはCやperl等を利用するしかなさそうですね。 ありがとうございました。