循环 bash 脚本的文件描述符问题

循环 bash 脚本的文件描述符问题

我继承了一个在函数中执行此操作的脚本:

# IO redirection for logging.
#touch $LOGFILE
exec 6>&1           # Link file descriptor #6 with stdout.
                # Saves stdout.
exec > $LOGFILE     # stdout replaced with file $LOGFILE.

touch $LOGERR
exec 7>&2           # Link file descriptor #7 with stderr.
                # Saves stderr.
exec 2> $LOGERR     # stderr replaced with file $LOGERR.

稍后在该函数中它会执行以下操作:

#Clean up IO redirection
exec 1>&6 6>&-      # Restore stdout and close file descriptor #6.
exec 1>&7 7>&-      # Restore stdout and close file descriptor #7.

问题是,如果我调用此函数两次(即在循环中),第二次迭代将在上面的第一组代码处停止,而不会显示错误。

为什么要这样做呢?

答案1

我不太确定为什么它会“停止”,无论你的意思是什么(脚本是否退出?挂起?),我确实看到一个问题:最后一行应该是exec 2>&7 7>&-. (此外,该行的注释应该是“stderr”而不是“stdout”。)

相关内容