[解決済み] ログファイルやコンソールへの出力の書き出し
質問
Unixシェルで、環境ファイル( env ファイルは、ログファイル名やパス、ログファイルへの出力やエラーのリダイレクト、データベース接続の詳細など、ユーザースクリプトの実行に必要なパラメータを定義しています。 ) があり、すべての出力 ( echo メッセージ ) とエラーは、以下のコードを使って実行されたスクリプトからログファイルにリダイレクトされます。
exec 1>>${LOG_FILE}
exec 2>>${LOG_FILE}
env ファイルは各スクリプトの最初に実行されます。envファイル内の上記のコードにより、ユーザー出力やエラーなどのすべてのコンソール出力は、私が実際に必要としていたログファイルに直接出力されるようになりました。
しかし、コンソールとログファイルの両方に表示させたい選択的なユーザー出力がいくつかあります。しかし、上記のコードのため、私はそれを行うことができません。
上記のコードを削除すれば、このケースで望ましい結果を得られることは分かっていますが、他のすべての出力をログ ファイルに手動で書き込む必要があり、これは簡単なタスクではありません。
上記のコードを削除せずに、コンソールとログファイルの両方で出力を得る方法はありますか。
どのように解決するのですか?
exec 3>&1 1>>${LOG_FILE} 2>&1
は stdout と stderr の出力をログファイルに送りますが、fd 3 をコンソールに接続したままにしておくことで、次のようなことができます。
echo "Some console message" 1>&3
を使えばコンソールにだけメッセージを書くことができますし
echo "Some console and log file message" | tee /dev/fd/3
にメッセージを書き込む。
ともに
コンソール
と
ログファイル
tee
はその出力を自分自身の fd 1 (ここでは
LOG_FILE
) と、書き込むように指示したファイル (ここでは fd 3, すなわちコンソール) の両方に出力を送ります。
例を示します。
exec 3>&1 1>>${LOG_FILE} 2>&1
echo "This is stdout"
echo "This is stderr" 1>&2
echo "This is the console (fd 3)" 1>&3
echo "This is both the log and the console" | tee /dev/fd/3
と表示されます。
This is the console (fd 3)
This is both the log and the console
をコンソール上に表示し
This is stdout
This is stderr
This is both the log and the console
をログファイルに書き出します。
関連
-
[解決済み】ログアウトと再ログインをせずに.bashrcの設定を再読み込みする方法とは?
-
[解決済み] ファイルを grep して、その周辺の行をいくつか表示する?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] 標準エラー出力に出力するエコー
-
[解決済み] svn log -v' のように 'git log' にファイル名を表示させる方法
-
[解決済み] 整数の合計を1行に1つずつ表示するシェルコマンド?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
-
[解決済み] 現在の日付と時刻を句読点を使わずに表示する
-
[解決済み] 実行中のBASHスクリプトのパスを決定する [重複].
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] IFS=$' \n' の正確な意味は何ですか?
-
[解決済み] bashのループリストで空白をエスケープするには?
-
[解決済み] bashのcurlステートメントに'&'文字を含める方法
-
[解決済み] Bashはどのように異なるディレクトリコンテキストでコマンドを実行できますか?
-
[解決済み] homebrew パッケージがインストールされているかどうかを検出する
-
[解決済み] BASHでAWS S3 CLIを使用して標準出力にファイルをダンプするには?
-
[解決済み] Bashでファイルの内容を既存ファイルの末尾に追加する [重複]。
-
[解決済み] Unixで、カレントディレクトリ以下をすべて削除するにはどうしたらいいですか?
-
[解決済み] .bashrcのエイリアスをvimのシェルコマンドで使用できるようにするには?(:!...)
-
[解決済み] シェルのワイルドカード文字展開を停止しますか?