関数からこれを行うスクリプトを継承しました。
# 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.
問題は、この関数を2回(つまりループ内で)呼び出すと、2番目の反復がエラーを表示せずに上記の最初のコードセットで停止することです。
私たちはなぜこのようなことをするのですか?
答え1
なぜ「停止」するのか分からない。どういう意味ですか(スクリプトが終了しますか?中断されますか?)問題が1つあります。最後の行はでなければなりませんexec 2>&7 7>&-
。 (また、その行のコメントは ""stdout"の代わりに"stderr"を使用します。)