我从 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}>&-
非常适合脚本。