Bash では、ファイル記述子とファイル間の接続を作成できます。たとえば、次のようになります。
exec > /path/to/myfile
fd 1をファイルにリンクします。
fdがどのファイルにも接続されないように、リンクされたすべてのファイルからfdを切断する方法を知りたいです。とファイル/dev/null
です/dev/tty
。
ありがとうございます。
私の目的は理解することです。シェルはファイル記述子0、1、2を制御端末に自動的に接続しますか?bash
、同じ bash シェルで実行する前に、bash から fd 0、1、2 の接続を切断してください。
答え1
必要なのは、>&-
(デフォルトfd 1)または<&-
(デフォルトfd 0)演算子を使用して、Bourneなどのシェルで実行されるファイル記述子を閉じることです。
exec >&-
exec 1>&-
exec 1<&-
同じで、close(1)
システムコールが発生します。
ファイルディスクリプタ0、1、2を閉じるのは一般的に悪い考えです。ほとんどのコマンドはこれらのファイル記述子が開いていると予想し(これはstdin、stdout、およびstderrです)、ファイルを開くとファイルが開く可能性があるためです。意図せずにstdin / stdout / stderrになり、stdoutまたはstderrに印刷するすべての内容が最終的にこのファイルに書き込まれる可能性があります。