私の目的は、スクリプトからのすべての出力を、スクリプトが作成するディレクトリに記録することです。
例えば、私は持っています:
~/.abc.sh
:
#! /bin/bash
Rails new myapp
実行すると...
cd ~/code
. ~/.abc.sh
...これにより、ディレクトリ~/code/myapp
に新しいRailsアプリが作成されます。
Railsがアプリを作成するとき、Rails
コマンドが新しく作成された同じディレクトリ内のログファイルにキャプチャして保存したいテキストを大量に出力します。ターミナルにもそのテキストを表示したいです。
これを行うにはどうすればよいですか?
そのためにtee
コマンドを使用できます。
command | tee /path/to/logfile
シェルへの書き込みなしの同等の値は次のとおりです。
command > /path/to/logfile
(>>
)を追加してシェルに出力を表示する場合は、-a
オプションを使用します。
command | tee -a /path/to/logfile
パイプはstdoutのみをキャッチし、stderrへのエラーはtee
のパイプでは処理されないことに注意してください。 (stderrから)エラーをログに記録する場合は、次を使用します。
command 2>&1 | tee /path/to/logfile
つまり、command
を実行し、stderrストリーム(2)をstdout(1)にリダイレクトします。これは、tee
アプリケーションとともにパイプに渡されます。