web-dev-qa-db-ja.com

ls -a 1>&-ができないのはなぜですか?

プロセスのstdoutを閉じることができないのはなぜですか?

リダイレクトコマンドを試していました。次の作品:

ls -a 0>&-
ls -a 2>&-

これは、プロセスls -astdinstderrを閉じることを意味します。しかし、なぜstdoutを閉じることが失敗するのですか?私は得ています

aniket@aniket-Compaq-610:~/Downloads$ ls -a 1>&-
ls: write error: Bad file descriptor

ここでstdoutを閉じるのは意味がないことは知っていますが、なぜ許可されないのか疑問に思っています。

6
Aniket Thakur

エラーメッセージからわかるように、stdoutを閉じることは明らかに失敗しませんが、逆に、書き込みが失敗するため成功します。編集:私の答えを明確にするために、最初にシェルにファイル記述子を閉じるように指示し、次にlsプログラムがそれに書き込もうとします。これがエラーメッセージの出所です。

25
Johan Myréen