ZSH:重置标准输出/标准输出重定向



我从 zsh 手册页收集到的一些时髦的东西是如何将 stdout 和 stderr 重定向到其他地方,例如文件。它的工作原理是这样的:

日志文件=/tmp/日志文件# 创建文件描述符并将其与日志文件关联整数 logfdexec {logfd}>> ${日志文件}echo "这转到控制台"echo "这也转到控制台">&2echo "this go to the logfile">&{logfd}# 现在将所有内容重定向到 stdout 和 stderr 到日志文件# 控制台上不会打印任何输出exec>&${logfd} 2>&1打印"这转到日志文件"打印"这也转到日志文件">&2

为了完整起见,可以通过发出 exec {logfd}>&- 来关闭文件描述符。

我只是想不通一件事。如何重置 zsh 的重定向,以便再次将进一步的输出打印到控制台?

在我发出ls -l /proc/self/fd/后找到了它。显然有一个可以使用的文件描述符0,它指向控制台。

因此,首先我们重定向回该文件描述符:

执行>&0 2>&1

现在日志文件可以安全地关闭:

exec {logfd}>&-

非常适合脚本。

最新更新