Wie können wir einen Dateideskriptor von einer beliebigen Datei trennen?

Wie können wir einen Dateideskriptor von einer beliebigen Datei trennen?

In der Bash können wir eine Verbindung zwischen einem Dateideskriptor und einer Datei herstellen, z. B. durch

exec > /path/to/myfile

welches fd 1 mit der Datei verbindet.

Ich habe mich gefragt, wie wir ein FD von einer damit verbundenen Datei trennen können, sodass das FD mit keiner Datei verbunden ist. Beachten Sie, dass /dev/nullund /dev/ttyDateien sind.

Danke.

Mein Ziel ist es, herauszufindenVerbindet eine Shell die Datei-Deskriptoren 0, 1 und 2 automatisch mit ihrem Steuerterminal?, indem Sie fd 0, 1 und 2 in Bash trennen, bevor Sie es bashin derselben Bash-Shell ausführen.

Antwort1

Sie möchten den Dateideskriptor schließen. In einer Bourne-ähnlichen Shell erfolgt dies mit dem Operator >&-(standardmäßig fd 1) oder <&-(standardmäßig fd 0):

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

sind alle gleichwertig und führen zu einem close(1)Systemaufruf.

Beachten Sie, dass es im Allgemeinen keine gute Idee ist, die Dateideskriptoren 0, 1 und 2 zu schließen, da die meisten Befehle davon ausgehen, dass diese geöffnet sind (es sind ihre stdin, stdout und stderr) und das Öffnen einer Datei dazu führen könnte, dass diese Datei versehentlich zu ihrer stdin/stdout/stderr wird und das, was sie auf stdout oder stderr ausgeben, letztendlich in diese Dateien geschrieben werden könnte.

verwandte Informationen