Dans le tutoriel bash que je lis, il est dit que si vous ouvrez un descripteur de fichier pour la lecture, c'est-à-dire
exec 3< echolist
Ensuite, vous devez le fermer comme ça,
exec 3<&-
Cependant, si vous ouvrez un descripteur de fichier en écriture, vous devez le fermer comme suit:
exec 3>&-
Pourtant, lorsque je regarde sur Internet, je vois des gens ouvrir des fichiers puis les fermer avec ceci:
exec 3>&-
NOTE: quand, selon le tutoriel, ils devraient utiliser exec 3<&1
.
Ma question est donc la suivante: tous les descripteurs de fichier peuvent-ils être fermés via exec n>&-
où n est le numéro du descripteur de fichier? Peu importe s'il était ouvert à la lecture, à l'écriture ou aux deux?
bash
shell
io-redirection
Jason
la source
la source
>&-
et<&-
est le fd par défaut lorsqu'il n'est pas spécifié (>&-
est1>&-
while<&-
est0<&-
). Identique pourx>&y
ce qui est identique àx<&y
sauf que six
non fourni.Réponses:
Vous pouvez fermer le descripteur de fichier en utilisant à la fois
<&-
et>&-
,bash
analysera la même syntaxe.Du fichier y.tab.c dans
bash
le code source:la source
<>
les descripteurs de fichiers.3>&-
ou3<&-
semble fermer le descripteur.<>
peut se faire de la même manière.Pour autant que je peux voir,
exec 3>&-
etexec 3<&-
sont les mêmes et peut être utilisé sur un descripteur de fichier, quelle que soit la façon dont il a été ouvert. Selon les sections 2.7.6 et 2.7.5 de la définition POSIX du langage de commande Shell :Notez que ni l'un ni l'autre ne spécifie quoi que ce soit sur la façon dont le descripteur de fichier n a été ouvert à l'origine. Ceci est conforme au fait que close (2) ne se soucie pas de la façon dont vous avez ouvert le fichier.
Un bref aperçu de ce qui suit:
par rapport à ceci:
montre que dans les deux cas, Bash fait exactement la même chose.
Deux faits légèrement intéressants
[n]>&-
ferme les descripteurs de fichiers.Dans le code Bash de gestion des redirections (redir.c), vous pouvez trouver ceci:
la source
[N]>&WORD
: git .savannah.gnu.org / cgit / bash.git / tree / doc /…Un exemple pour la compréhension par Cuonglm de la fermeture d’un FD <<>.
Ceci est cité dans Advanced Bash-Scripting Guide, à l' adresse http://tldp.org/LDP/abs/html/io-redirection.html.
la source