Answers:
您可以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"
对stdout和stderr使用附加的fd 3和4,并在脚本末尾将1和2重定向到它们:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
exec 3>/dev/stdout 4>/dev/stderr -bash: /dev/stdout: Permission denied
首先,您应该检查一下是否有tty。
if tty -s; then
echo "Hello, World" > $(tty)
fi
tty实用程序。您可以重定向到特殊设备/dev/tty。
>&3使之成为我的首选解决方案。再次感谢)!