我继承了一个在函数中执行此操作的脚本:
# 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”。)