我从zsh手册页面收集的一些时髦的东西是你如何将stdout和stderr重定向到其他地方,例如一份文件。它的工作原理如下:
logfile=/tmp/logfile # Create a file descriptor and associate it with the logfile integer logfd exec {logfd} >> ${logfile} echo "This goes to the console" echo "This also goes to the console" >&2 echo "This goes to the logfile" >&{logfd} # Now redirect everything to stdout and stderr to the logfile # No output will be printed on the console exec >&${logfd} 2>&1 print "This goes to the log file" print "This also goes to the log file" >&2
为了完整起见,可以通过发出exec {logfd}>&-
来关闭文件描述符。
我只能弄清楚一件事。如何重置zsh的重定向,以便再次将输出打印到控制台?
答案 0 :(得分:2)
在我发出ls -l /proc/self/fd/
之后找到它。显然有一个可以使用的文件描述符0
,它指向控制台。
所以,首先我们重定向回那个文件描述符:
exec >&0 2>&1
现在可以安全地关闭日志文件:
exec {logfd}>&-
脚本的理想选择。