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.

問題は、この関数を2回(つまりループ内で)呼び出すと、2番目の反復がエラーを表示せずに上記の最初のコードセットで停止することです。

私たちはなぜこのようなことをするのですか?

ベストアンサー1

なぜ「停止」するのか分からない。どういう意味ですか(スクリプトが終了しますか?中断されますか?)問題が1つあります。最後の行はでなければなりませんexec 2>&7 7>&-。 (また、その行のコメントは ""stdout"の代わりに"stderr"を使用します。)

おすすめ記事