[解決済み] STDOUTとSTDERRの両方をターミナルとログファイルに出力するにはどうすればよいですか?
質問
技術者でないユーザーが対話的に実行するスクリプトがあります。このスクリプトは、ユーザーがスクリプトが問題なく実行されていることを確認できるように、STDOUT にステータスの更新を書き込みます。
私は、STDOUT と STDERR の両方をターミナルにリダイレクトさせたいと思います (ユーザーがスクリプトが動作していることを確認し、また問題があったことを確認できるようにするため)。また、両方のストリームをログ ファイルにリダイレクトさせたいと思います。
ネット上でたくさんの解決策を見ました。うまくいかないものもあれば、恐ろしく複雑なものもあります。私は実行可能なソリューションを開発しましたが (これは回答として入力されます)、それは不器用です。
完璧なソリューションは、ターミナルとログ ファイルの両方に両方のストリームを送信する任意のスクリプトの先頭に組み込むことができる 1 行のコードでしょう。
EDIT。 STDERRをSTDOUTにリダイレクトし、結果をteeにパイプすることは機能しますが、それはユーザーがリダイレクトとパイプ出力を覚えていることに依存します。私は、ロギングが確実で自動的であることを望みます (これが、スクリプト自体にソリューションを埋め込むことができるようにしたい理由です)。
どのように解決するのですか?
ファイルや画面へのリダイレクトには "tee" を使用します。 使用するシェルによっては、標準エラー出力を標準エラー出力にリダイレクトする必要があります。
./a.out 2>&1 | tee output
または
./a.out |& tee output
csh には "script" という組み込みコマンドがあり、画面に表示されるすべてのものをファイルに取り込むことができます。 script" とタイプして起動し、キャプチャしたいことを何でもやってから、control-D を押してスクリプトファイルを閉じます。 sh/bash/kshに相当するものは知りません。
また、これらはあなた自身の sh スクリプトであり、あなたが修正できることを示したので、次のようにスクリプト全体を中括弧またはブラケットで囲むことによって、内部でリダイレクトを行うことができます。
#!/bin/sh
{
... whatever you had in your script before
} 2>&1 | tee output.file
関連
-
[解決済み] osx find exec rm find: exec: 不明な主またはオペレータ
-
[解決済み] awkシステムコール
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] '\r': command not found - .bashrc / .bash_profile [duplicate].
-
[解決済み] Bashで$()と`の違いはあるのでしょうか?重複] [重複
-
[解決済み] etc/profileでVISIBLE=NOWを設定するのはなぜですか?
-
[解決済み] スクリプトからのエラーメッセージを含むすべての端末出力をログファイルにパイプする方法
-
[解決済み] シェルスクリプトで整数式が期待されるエラー
-
[解決済み] AWS CLIのプロファイルを一時的に切り替えるには?
-
[解決済み] Bash - "fi ;;" の使い方は?
-
[解決済み] Bashのforeachループ
-
[解決済み] Bashスクリプトの'''抜け'''がある] [クローズド]
-
[解決済み] パイプで "tee "を使用しているときに、標準エラーをファイルに書き込むにはどうすればよいですか?