Bourneシェルスクリプトのすべての出力をどこかにリダイレクトすることは可能ですが、スクリプト自体の中にシェルコマンドを使用しますか?
単一のコマンドの出力をリダイレクトするのは簡単ですが、次のようなものが必要です。
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
意味:スクリプトが非対話的に実行される場合(cronなど)、すべての出力をファイルに保存します。シェルからインタラクティブに実行する場合は、出力を通常どおりstdoutに送信します。
FreeBSDの定期的なユーティリティによって通常実行されるスクリプトに対してこれを実行したいと思います。これは毎日の実行の一部であり、通常は毎日メールで確認する必要がないため、送信しません。ただし、この1つの特定のスクリプト内の何かが失敗した場合、それは私にとって重要であり、毎日のジョブのこの一部の出力をキャプチャして電子メールで送信できるようにしたいと考えています。
更新:ジョシュアの答えは正解ですが、スクリプト全体のstdoutとstderrを保存して復元したかったので、次のように行いました。
# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1
# ...
# restore stdout and stderr
exec 1>&3 2>&4
exec 1>&3 2>&4 3>&- 4>&-