C'est littéral, ce {fd}
n'est pas un espace réservé. J'ai un script qui fait cela, et ne source rien, ni ne fait référence à {fd} nulle part ailleurs. Est-ce que c'est bash valide?
exec {fd}</dev/watchdog
C'est littéral, ce {fd}
n'est pas un espace réservé. J'ai un script qui fait cela, et ne source rien, ni ne fait référence à {fd} nulle part ailleurs. Est-ce que c'est bash valide?
exec {fd}</dev/watchdog
Réponses:
Plutôt que d'avoir à choisir un descripteur de fichier et espérer qu'il soit disponible:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
cette notation demande au shell de choisir un descripteur de fichier qui n'est pas actuellement utilisé, d'ouvrir le fichier pour lire sur ce descripteur et d'attribuer le numéro à la variable donnée ( fd
).
$ exec {fd}< /dev/watchdog
$ echo $fd
10
REDIRECTIONS
. Cela ne vous saute pas vraiment aux yeux, car ils ne donnent pas d'exemple explicite.
/dev/watchdog
n'existe pas non plus sur Mac OS X; c'est un appareil spécifique à Linux.
La forme:
{var}<filename
fait le shell ouvrir le fichier filename
pour lire et stocker le numéro de descripteur de fichier dans une variable var
. Il n'y a pas d'espace autorisé entre {var}
et les opérateurs de redirection, et le numéro de descripteur de fichier sera supérieur ou égal 10
.
Cette fonction était d' origine à partir ksh
( à partir ksh93r version en 2006), a bash
copié beaucoup plus tard à bash-4.1-alpha
partir de 2010. a zsh
également fait le changement plus tôt que bash
d' zsh 4.3.4
en 2007.
Ceci est expliqué dans la section du manuel Bash sur les redirections .
Chaque redirection qui peut être précédée d'un numéro de descripteur de fichier peut à la place être précédée d'un mot de la forme { varname }. Dans ce cas, pour chaque opérateur de redirection à l'exception de
>&-
et<&-
, le shell allouera un descripteur de fichier supérieur à 10 et l'affectera à { varname }. Si>&-
ou<&-
est précédé de { varname }, la valeur de varname définit le descripteur de fichier à fermer.