[解決済み】bashスクリプト自身からstdoutのCOPYをログファイルにリダイレクトする。
2022-04-02 05:55:50
質問
私は、以下の方法を知っています。 標準出力をリダイレクトする をファイルに保存します。
exec > foo.log
echo test
これは、'test' を foo.log ファイルに入れることになります。
今度は ログファイルへの出力をリダイレクトし、かつ標準出力に残す。
つまり、スクリプトの外から簡単に実行できるのです。
script | tee foo.log
しかし、私はそれをスクリプト自体の中で宣言したいのです。
試しに
exec | tee foo.log
が、うまくいかなかった。
どうすればいいですか?
#!/usr/bin/env bash
# Redirect stdout ( > ) into a named pipe ( >() ) running "tee"
exec > >(tee -i logfile.txt)
# Without this, only stdout would be captured - i.e. your
# log file would not contain any error messages.
# SEE (and upvote) the answer by Adam Spiers, which keeps STDERR
# as a separate stream - I did not want to steal from him by simply
# adding his answer to mine.
exec 2>&1
echo "foo"
echo "bar" >&2
なお、これは
bash
ではなく
sh
. でスクリプトを起動した場合
sh myscript.sh
というエラーが発生します。
syntax error near unexpected token '>'
.
シグナルトラップを扱う場合は
tee -i
オプションを使用すると、シグナルが発生したときに出力が乱れるのを防ぐことができます。(JamesThomasMoon1979さん、コメントありがとうございました)。
パイプに書き込むかターミナルに書き込むかで出力が変わるツール(
ls
例えば、カラーやカラム化された出力を使用する場合、上記の構成はパイプに出力することを意味するものとして検出されます。
色付け/列挙を強制するオプションがあります (例.
ls -C --color=always
). なお、この場合、カラーコードがログファイルにも書き込まれるため
少ない
を読み取ることができます。
関連
-
[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。
-
[解決済み] Bash/Terminalで複数行の環境変数を書き出す方法 例: RSA秘密鍵
-
[解決済み] nohupプロセスを終了させる方法を教えてください。
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで標準出力と標準エラーの両方をファイルにリダイレクトして追記する方法
-
[解決済み] 出力をファイルや標準出力にリダイレクトする方法
-
[解決済み】Bashスクリプトでクリップボードにパイプを接続する
-
[解決済み】シェルスクリプト全体の出力を、スクリプト自体の中でリダイレクトするには?
-
[解決済み] STDOUTとSTDERRの両方をターミナルとログファイルに出力するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】shでJenkinsのステージから他のステージに変数を渡す
-
[解決済み] テスト
-
[解決済み] バッシュ Vim.NET」が表示されたらVimを終了させる Warning: 出力先が端末でない"
-
[解決済み] (standard_in) 1: bash スクリプトのシンタックスエラー
-
[解決済み] bash スクリプトの "${BASH_SOURCE[0]}" と $( cd $( dirname "xxx" && pwd )) の意味について
-
[解決済み] Bashを使ってプログレスインジケータを表示する [重複]。
-
[解決済み] grepの出力に含まれる重複を削除する
-
[解決済み] findコマンドと一緒に使用するとエラー 'rm: missing operand' が発生する。
-
[解決済み] MINGW64 "make build" エラー。"bash: make: コマンドが見つかりません"
-
[解決済み】シェルスクリプト全体の出力を、スクリプト自体の中でリダイレクトするには?