• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:bashでfold整形後のリダイレクトについて)

bashでfold整形後のリダイレクト方法について

このQ&Aのポイント
  • bashでのexecコマンドのリダイレクト方法について質問があります。execコマンドでのログ出力を整形してリダイレクトしたい場合、foldコマンドを使用することができますが、ファイル出力した場合に全てのログが出力されない問題が発生しました。リダイレクトされたファイルに標準出力と同期して全てのログを出力させる方法はありますか?
  • bashでのexecコマンドのリダイレクト方法について質問があります。foldコマンドを使用してログの整形を行った後、ファイルにリダイレクトするとログの一部が欠けてしまいます。全てのログをファイルに出力させる方法はありますか?
  • bashでのexecコマンドのリダイレクト方法についてアドバイスをいただきたいです。ファイルへのリダイレクト時にログが途中で切れてしまい、全てのログが出力されません。ログを完全にファイルに出力させる方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

意味が最初わからなかったのですが、execとお書きなのはシェルの組み込みコマンドのexecでなくて、実際にはexecではないプログラム名称を書き換えてexecとお書きなのですね。 (例示であればfooだとかhogeだとかの方が良いです) No1の方がお書きのようにバッファリングの問題であるなら(プログラムを終了させるとちゃんとファイルに出力されるのなら)、バッファリングしない(もしくは行単位でバッファリングする)プログラムを使うしか無いですね。 OSは何でしょう?Linuxではなさそうですが。 折り返しだけなら自分でCでプログラムを書くというのもありそうです。 あとは、そのままファイルに書いて、viで開く前にfoldするとか。

MK666
質問者

お礼

教えてgooの操作になれておらず、補足に入力しておりました。すいません。 回答ありがとうございました。

MK666
質問者

補足

回答ありがとうございます。 > 例示であればfooだとかhogeだとかの方が良いです ご指摘ありがとうございました、以降気をつけます。 > OSは何でしょう? HP-UX 11.31です。 > バッファリングしない(もしくは行単位でバッファリングする)プログラムを使うしか無いですね。 perlで以下のようなプログラムを挟むことで、バッファリングを回避してログ出力することができました。 exec | perl -ne '$|=1;while(<STDIN>){print if (length($_)<256);}' > server.log (整形とは違いますが、面倒だったんで256文字以上は排除しました) 外部コマンドを使うのは少し抵抗があったんですが、やはりこのようなケースはCやperl等を利用するしかなさそうですね。 ありがとうございました。

その他の回答 (1)

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

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

MK666
質問者

お礼

教えてgooの操作になれておらず、補足に入力しておりました。すいません。 回答ありがとうございました。

MK666
質問者

補足

タイトルでも「bashで」と記述していたにも関わらず、使用しているシェルはPOSIXシェルでした。 大変申し訳ございません。。。 POSIXシェルにはsedにuオプションが無いようで(manで見る限り、他のバッファリングをコントロールするオプションも見当たらず…)いただいた回答を実現することが出来ませんでした。