![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
bashのスクリプトについて質問させてください。
現在、サーバプログラムexecの起動とログ出力を以下のコマンドで実行しております。
exec > server.log
しかし、execの出力行の中に、server.logをviで開くことができないような、文字数の多い行が出力されるようになったため
整形してリダイレクトしたいと考えております。そこで
exec | fold -w 256
としたところ、exec起動時のログが整形されて正しく標準出力されました。
しかし、これを下記のようにリダイレクトしてファイル出力した場合、起動時のログが尻切れとなり、最後まで出力されませんでした。
exec | fold -w 256 > server.log
起動後にサーバに接続し、以降のサーバーログを出力させると、尻切れから先が出力されはしたのですが、
現在、起動後にserver.logを確認すると最終行の「server startup OK」という文字が確認できない、という状況になっております。
リダイレクトされたファイルにも、標準出力と同期して最終文字まで出力させる方法はございますでしょうか?
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
意味が最初わからなかったのですが、execとお書きなのはシェルの組み込みコマンドのexecでなくて、実際にはexecではないプログラム名称を書き換えてexecとお書きなのですね。
(例示であればfooだとかhogeだとかの方が良いです)
No1の方がお書きのようにバッファリングの問題であるなら(プログラムを終了させるとちゃんとファイルに出力されるのなら)、バッファリングしない(もしくは行単位でバッファリングする)プログラムを使うしか無いですね。
OSは何でしょう?Linuxではなさそうですが。
折り返しだけなら自分でCでプログラムを書くというのもありそうです。
あとは、そのままファイルに書いて、viで開く前にfoldするとか。
この回答への補足
回答ありがとうございます。
> 例示であればfooだとかhogeだとかの方が良いです
ご指摘ありがとうございました、以降気をつけます。
> OSは何でしょう?
HP-UX 11.31です。
> バッファリングしない(もしくは行単位でバッファリングする)プログラムを使うしか無いですね。
perlで以下のようなプログラムを挟むことで、バッファリングを回避してログ出力することができました。
exec | perl -ne '$|=1;while(<STDIN>){print if (length($_)<256);}' > server.log
(整形とは違いますが、面倒だったんで256文字以上は排除しました)
外部コマンドを使うのは少し抵抗があったんですが、やはりこのようなケースはCやperl等を利用するしかなさそうですね。
ありがとうございました。
No.1
- 回答日時:
fold はバッファをコントロールするオプションがないみたいだね。
http://linuxjm.sourceforge.jp/html/GNU_textutils …
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
この回答への補足
タイトルでも「bashで」と記述していたにも関わらず、使用しているシェルはPOSIXシェルでした。
大変申し訳ございません。。。
POSIXシェルにはsedにuオプションが無いようで(manで見る限り、他のバッファリングをコントロールするオプションも見当たらず…)いただいた回答を実現することが出来ませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- UNIX・Linux Kali Linuxで起動できない - Minimal BASH Like Line Editing 1 2022/06/03 13:14
- Perl bashスクリプト 2 2023/02/10 21:01
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- Perl perlのプログラミング 部分入れ替えの方法 1 2022/10/11 22:26
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- デスクトップパソコン 認証コードが入力できない(同じ数字が次のマスにも勝手に入力される) 8 2023/01/27 12:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの時刻の形式について
-
accessでクエリをExcelにエクス...
-
Excel で「OLE は現在使用でき...
-
コマンドプロンプトのテキスト...
-
VB.NET操作で Excelにビットマ...
-
ショートカットで起動した場合...
-
ファイナルカットで編集した動...
-
COBOL、項目末尾に空白がある場...
-
VB6.0でExcel,PDF,Word出力方法
-
Thunderbird 受信メールからの...
-
bashでfold整形後のリダイレク...
-
EXCEL VBAでのCSVファイル読み...
-
StreamReaderで読み込んだファ...
-
【Excel VBA】取り込んだファイ...
-
C++によるファイル送受信プログ...
-
JavaでPDFファイルに変換するに...
-
ATTファイルってどうやって開け...
-
テキストファイル内容の、16進...
-
VBAでフォルダ内の全てのcsv...
-
BASP21のファイルアップロード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
COBOL、項目末尾に空白がある場...
-
コマンドプロンプトのテキスト...
-
Thunderbird 受信メールからの...
-
AccessのレポートからPDFをペー...
-
accessのリポートを、excelに出...
-
COBOL FILLER
-
WshShellから起動したbat(ftp)...
-
Acrobat参照設定
-
ファイナルカットで編集した動...
-
クエリをエクセルファイルへの出力
-
excel vbaでのxml出力がわかり...
-
ショートカットで起動した場合...
-
VBA 参照先で選んだファイルを...
-
iTextでPDFを表示させたら日本...
-
Excel で「OLE は現在使用でき...
-
“ファイルに出力”した印刷ファ...
-
EXCEL VBAでのCSVファイル読み...
-
TransferSpreadsheetでフルパス...
おすすめ情報