In dem Bash-Tutorial, das ich lese, heißt es, dass, wenn Sie einen Dateideskriptor zum Lesen öffnen, d. H
exec 3< echolist
Dann müssen Sie es so schließen,
exec 3<&-
Wenn Sie jedoch einen Dateideskriptor zum Schreiben öffnen, muss dieser folgendermaßen geschlossen werden:
exec 3>&-
Wenn ich jedoch im Internet nachschaue, sehe ich, wie Leute Dateien öffnen und dann mit diesen schließen:
exec 3>&-
HINWEIS: Wenn sie laut Tutorial verwendet werden sollen exec 3<&1
.
Meine Frage ist also, ob alle Dateideskriptoren geschlossen werden können, exec n>&-
wobei n die Dateideskriptornummer ist. Egal, ob es zum Lesen, Schreiben oder für beides geöffnet wurde?
bash
shell
io-redirection
Jason
quelle
quelle
>&-
und<&-
ist der Standardwert fd, wenn nichts angegeben ist (>&-
is1>&-
while<&-
is0<&-
). Das Gleiche gilt fürx>&y
die gleiche ist , wie esx<&y
sei denn,x
nicht vorgesehen ist.Antworten:
Sie können mit Dateideskriptor schließen beide
<&-
und>&-
,bash
zwei Syntax wie die gleiche analysieren wird.Aus der Datei y.tab.c im
bash
Quellcode:quelle
<>
Dateideskriptoren verwendet werden.3>&-
oder3<&-
scheint der Deskriptor zu schließen.<>
kann auf die gleiche Weise erfolgen.Soweit ich sehen kann, sind
exec 3>&-
undexec 3<&-
die gleichen und können für jeden Dateideskriptor verwendet werden, unabhängig davon, wie er geöffnet wurde. Gemäß den Abschnitten 2.7.6 und 2.7.5 der POSIX-Definition der Shell Command Language :Beachten Sie, dass keines davon etwas darüber angibt, wie der Dateideskriptor n ursprünglich geöffnet wurde. Dies steht im Einklang mit der Tatsache, dass es close (2) egal ist, wie Sie die Datei geöffnet haben.
Ein kurzer Überblick über Folgendes:
gegenüber diesem:
zeigt, dass Bash in beiden Fällen genau dasselbe tut.
Zwei leicht interessante Fakten
[n]>&-
Dateideskriptoren geschlossen werden.Im Bash-Code für die Behandlung von Weiterleitungen (redir.c) finden Sie Folgendes:
quelle
[N]>&WORD
: gitEin Beispiel für das Verständnis von cuonglm, ein '<>' FD zu schließen.
Dies wird aus dem Advanced Bash-Scripting Guide unter http://tldp.org/LDP/abs/html/io-redirection.html zitiert
quelle