
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/null
und /dev/tty
Dateien 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 bash
in 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.