echo
をたくさん含むシェルスクリプトがあります。出力をログファイルにリダイレクトしたいと思います。コマンド呼び出しcmd > logfile.txt
があること、またはファイルecho 'xy' > logfile.txt
で実行することは知っていますが、スクリプトでファイル名を設定するだけで、このファイルにすべてのエコーが自動的に書き込まれますか?
スクリプトの先頭に次の行を追加できます。
#!/bin/bash
# redirect stdout/stderr to a file
exec &> logfile.txt
または、stdoutの使用のみをリダイレクトする場合:
exec > logfile.txt
以下のコマンドを使用して管理しようとしました。これにより、ログファイルに出力が書き込まれ、コンソールに出力されます。
#!/bin/bash
# Log Location on Server.
LOG_LOCATION=/home/user/scripts/logs
exec > >(tee -i $LOG_LOCATION/MylogFile.log)
exec 2>&1
echo "Log Location should be: [ $LOG_LOCATION ]"
サブシェルを使用して、シェルスクリプトのさまざまな部分をファイル(または複数のファイル)に簡単にリダイレクトできます。
{
command1
command2
command3
command4
} > file1
{
command5
command6
command7
command8
} > file2
LOG_LOCATION="/path/to/logs"
exec >> $LOG_LOCATION/mylogfile.log 2>&1