現在、次のようにログファイルにメッセージを記録するシェルスクリプトがあります。
log_file="/some/dir/log_file.log"
echo "some text" >> $log_file
do_some_command
echo "more text" >> $log_file
do_other_command
このスクリプトを実行すると、画面に何も出力されず、パテを介してサーバーに接続されているため、スクリプトの実行を終了できず、したいので、別の接続を開いて「tail -f log_file_path.log」を実行する必要があります。リアルタイムで出力を見ることができます。
明らかに私が望むのは、テキストメッセージを画面とファイルに印刷することですが、2行ではなく1行でやりたいと思います。そのうちの1つはファイルにリダイレクトされません。
この目標を達成する方法は?
ベストアンサー1
これは働きます:
command | tee -a "$log_file"
tee
入力をファイルに保存し(-a
上書きの代わりに追加を使用)、入力を標準出力にコピーします。
コマンドは現在非対話型で実行中であることを検出できるため、動作が変更される可能性があります。最も一般的な副作用は、カラー出力が無効になることです。このような場合(ANSIカラーで区切られた出力が必要な場合)、コマンド文書を確認して強制的に対話型の動作に戻す方法があるかどうかを確認する必要がありますgrep --color=always
。返品less --RAW-CONTROL-CHARS "$log_file"
エスケープコードリテラルを中断せずに読み取るために使用するエスケープコードが含まれています。また、ログファイルの内容を作成する方法はありません。その他上記のコマンドを実行したときに画面に印刷される内容は何ですか?したがって、画面上の色分けされた出力とログファイルに色以外の出力を持つことはできません。