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