我用 :
exec >script.log 2>&1
在我的脚本中将所有输出重定向到文件。在脚本的末尾,我想在屏幕上打印一条消息。如何停止重定向?
答案1
您可以exec
再次调用以恢复原始描述符。您需要将它们保存在某个地方。
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
在记录的部分内,您可以通过重定向到额外的描述符来使用一个命令的原始描述符。
echo "30 seconds remaining" >&3
或者,您可以将脚本的记录部分放入复合命令中并重定向该复合命令。如果您想在重定向部分内的某个陷阱中使用原始描述符,则此方法不起作用。
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
答案2
对 stdout 和 stderr 使用 additinal fd 3 和 4,并在脚本末尾将 1 和 2 重定向到它们:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
答案3
首先你应该检查你是否有一个tty。
if tty -s; then
echo "Hello, World" > $(tty)
fi