如何通过 exec 停止重定向

如何通过 exec 停止重定向

我想将脚本的一些输出重定向到文件。

REDIRECT_FILE="foo.txt"

echo to console

# starting redirect
exec > $REDIRECT_FILE

echo to file
echo ...
echo ...

# stop redirect
exec >&-

echo end of script

“脚本结束”应该写入标准输出。但出现了“错误文件描述符”错误消息。

exec 1>&-也不起作用。

停止重定向的正确术语是什么?

答案1

关闭exec 1>&-标准输出。它不会将其恢复为原始值,因为您已经将其替换为exec > $REDIRECT_FILE(这应该是exec > "$REDIRECT_FILE"为了保护变量的值免受 shell 的任何进一步处理)。

恢复标准输出您需要保存它的原始值

exec 3>&1                  # Save stdout as FD 3
exec 1>"$REDIRECT_FILE"    # Redirect stdout to a file
exec 1>&3                  # Revert stdout to its original value

相关内容