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