ファイル記述子を任意のファイルから切断するにはどうすればよいですか?

ファイル記述子を任意のファイルから切断するにはどうすればよいですか?

bashでは、ファイル記述子とファイルの間に接続を作成できます。たとえば、

exec > /path/to/myfile

これは fd 1 をファイルに接続します。

fd がどのファイルにも接続されないように、fd とそれに接続されているファイルを切断するにはどうすればよいでしょうか。 および はファイルであることに注意して/dev/nullください/dev/tty

ありがとう。

私の目的はシェルはファイル記述子 0、1、2 を制御端末に自動的に接続しますか?bash同じ bash シェルで実行する前に、bash で fd 0、1、2 を切断します。

答え1

必要なのはファイル記述子を閉じることです。これは、Bourne のようなシェルでは>&-(defaults to fd 1) または<&-(defaults to fd 0) 演算子を使用して実行されます。

exec >&-
exec 1>&-
exec 1<&-

これらはすべて同等であり、close(1)システムコールが実行されます。

通常、ファイル記述子 0、1、2 を閉じるのはよくないことに注意してください。ほとんどのコマンドは、これらのファイルが開いていることを想定しているため (これらのファイルはコマンドの stdin、stdout、stderr です)、ファイルを開くと、そのファイルが意図せずコマンドの stdin/stdout/stderr になり、コマンドが stdout または stderr に出力する内容がこれらのファイルに書き込まれる可能性があります。

関連情報