我有一个 bash 脚本,其中我将输出重定向到文件进行记录。
if test -t 1; then
# stdout is a terminal
exec > $OUTPUT_FILE 2>&1
else
# stdout is not a terminal, no logging.
false
fi
稍后我有一个地方确实需要将输出发送到 stdout。有没有办法只覆盖一个调用来强制执行该操作?
echo test 1>
答案1
您可以在脚本的较早位置放置此行:
exec 3>&1
然后,每当您需要发送某些内容到标准输出时:
echo "this goes to stdout" 1>&3
清理:
exec 1>&3
echo "now goes to normal stdout"
exec 3>&- #to remove fd3
它的工作原理是,您定义一个新的文件描述符 3,它指向与 stdout 相同的位置。然后,您可以根据需要重定向 stdout,但 fd3 保持不变(即您的终端)。完成后,只需删除 fd3 即可!
编辑:
如果您希望输出同时转到您的文件和“经典标准输出”,请执行以下操作:
echo "goes both places" | tee -a $OUTPUT_FILE 1>&3