如何在 bash 中停止重定向

如何在 bash 中停止重定向

我用 :

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

相关内容