zsh:reset stdout / stderr重定向

时间:2014-02-21 01:02:18

标签: zsh file-descriptor io-redirection

我从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的重定向,以便再次将输出打印到控制台?

1 个答案:

答案 0 :(得分:2)

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

所以,首先我们重定向回那个文件描述符:

exec >&0 2>&1

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

exec {logfd}>&-

脚本的理想选择。