Apakah mungkin untuk mengalihkan semua output skrip Bourne shell ke suatu tempat, tetapi dengan perintah shell di dalam skrip itu sendiri?
Mengarahkan output dari satu perintah itu mudah, tetapi saya ingin sesuatu yang lebih seperti ini:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
Artinya: jika skrip dijalankan non-interaktif (misalnya, cron), simpan output dari segalanya ke file. Jika dijalankan secara interaktif dari shell, biarkan output pergi ke stdout seperti biasa.
Saya ingin melakukan ini untuk skrip yang biasanya dijalankan oleh utilitas periodik FreeBSD. Itu adalah bagian dari kegiatan harian, yang biasanya tidak saya perhatikan setiap hari melalui email, jadi saya tidak mengirimkannya. Namun, jika sesuatu di dalam skrip yang satu ini gagal, itu penting bagi saya dan saya ingin dapat menangkap dan mengirim email output dari bagian pekerjaan harian ini.
Pembaruan: Jawaban Joshua tepat, tetapi saya juga ingin menyimpan dan memulihkan stdout dan stderr di seluruh skrip, yang dilakukan seperti ini:
# 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>&-