スクリプト出力を画面に保存しながらファイルに書き込むにはどうすればよいですか?

スクリプト出力を画面に保存しながらファイルに書き込むにはどうすればよいですか?

スクリプトを画面に出力するだけでなく、その出力をファイルに書き込むにはどうすればよいですか?ユーザーが出力や他のソリューションをパイプするように要求するのではなく、スクリプトでこの操作が自動的に実行されることを願っていますtee

答え1

使用tee

script.sh < inputfile | tee logfile

答え2

指定しなかったので、これがbashスクリプトであると仮定します。man bash(強調)によると:

exec [-cl] [-a name] [コマンド[引数]]
コマンドが指定された場合、シェルを置き換えます。新しいプロセスは作成されません。これらのパラメーターはコマンドのパラメーターになります。 -lオプションが指定されると、シェルはコマンドに渡された0番目の引数の先頭にダッシュを配置します。これが login(1) が行うことです。 -c オプションを使用すると、コマンドは空の環境で実行されます。 aが指定されると、シェルは実行されたコマンドの0番目の引数として名前を渡します。何らかの理由でコマンドを実行できない場合は、execfailシェルオプションを有効にしないと、非対話型シェルが終了します。この場合、失敗を返します。ファイルを実行できない場合、対話型シェルは失敗を返します。コマンドを指定しないと、すべてのリダイレクトが現在のシェルに適用されます。、戻り状態は0です。リダイレクトエラーがある場合、戻り状態は1です。

だからあなたは使用することができますプロセスの交換teeファイルのコピーにロギングを実行し、標準出力をそのファイルにリダイレクトしてteeすぐに印刷して記録します。

exec > >(tee /path/to/log-file)

stderrもキャプチャするにはstdoutとマージする必要があります。

exec 2>&1

または、次を使用して両方をキャプチャします。

exec &> >(tee /path/to/log-file)

関連情報