是否可以将Bourne Shell脚本的所有输出重定向到某个位置,但是脚本本身内部包含Shell命令?
重定向单个命令的输出很容易,但是我想要更多这样的东西:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
含义:如果脚本是非交互式运行的(例如cron),则将所有内容保存到文件中。如果从外壳以交互方式运行,则使输出照常进入stdout。
我想对通常由FreeBSD定期实用程序运行的脚本执行此操作。这是日常运行的一部分,通常我不希望每天都在电子邮件中看到它,因此我没有发送它。但是,如果此特定脚本中的某些内容失败了,那对我来说很重要,我希望能够捕获并通过电子邮件发送这部分日常工作的输出。
更新:Joshua的答案是即时的,但我也想在整个脚本中保存和还原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>&-