Bourne kabuk betiğinin tüm çıktısını bir yere yönlendirmek mümkün, ancak betiğin içindeki kabuk komutları ile?
Tek bir komutun çıktısını yeniden yönlendirmek kolaydır, ancak bunun gibi bir şey daha istiyorum:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
Anlamı: komut dosyası etkileşimli olmayan bir şekilde çalıştırılırsa (örneğin, cron), her şeyin çıktısını bir dosyaya kaydedin. Kabuktan etkileşimli olarak çalıştırılırsa, çıkışın her zamanki gibi stdout'a gitmesine izin verin.
Bunu normalde FreeBSD periyodik yardımcı programı tarafından çalıştırılan bir komut dosyası için yapmak istiyorum. Günlük çalışmanın bir parçası, normalde her gün e-postayla görmeyi ummuyorum, bu yüzden gönderilmesini istemiyorum. Ancak, bu belirli bir komut dosyasının içindeki bir şey başarısız olursa, bu benim için önemli ve günlük işlerin bu bir bölümünün çıktısını yakalayıp e-postayla göndermek istiyorum.
Güncelleme: Joshua'nın cevabı spot-on, ama ben de stdout ve stderr'ı şu şekilde yapılan tüm komut dosyası etrafında kaydetmek ve geri yüklemek istedim:
# 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>&-