Eso es literal, {fd}
no es un marcador de posición. Tengo un script que hace esto, y no se basa en nada, ni hace referencia a {fd} en ningún otro lugar. ¿Es válido este bash?
exec {fd}</dev/watchdog
Eso es literal, {fd}
no es un marcador de posición. Tengo un script que hace esto, y no se basa en nada, ni hace referencia a {fd} en ningún otro lugar. ¿Es válido este bash?
exec {fd}</dev/watchdog
Respuestas:
En lugar de tener que elegir un descriptor de archivo y esperar que esté disponible:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
Esta notación le pide al shell que elija un descriptor de archivo que no esté actualmente en uso, abra el archivo para leer en ese descriptor y asigne el número a la variable dada ( fd
).
$ exec {fd}< /dev/watchdog
$ echo $fd
10
REDIRECTIONS
. Realmente no te llama la atención, ya que no dan un ejemplo explícito.
/dev/watchdog
embargo, @CharlesDuffy tampoco existe en Mac OS X; Es un dispositivo específico de Linux.
La forma:
{var}<filename
hecho que el archivo de shell filename
para la lectura y el archivo de almacenamiento de número de descriptor en la variable var
. No hay espacio permitido entre los {var}
operadores de redirección y, y el número de descriptor de archivo será mayor o igual 10
.
Esta característica era original del ksh
(de la versión ksh93r en 2006), bash
lo copió mucho más tarde en la bash-4.1-alpha
de 2010. zsh
También hizo el cambio antes de lo que bash
a partir zsh 4.3.4
de 2007.
Esto se explica en la sección del manual de Bash sobre redirecciones .
Cada redirección que puede estar precedida por un número de descriptor de archivo puede ir precedida por una palabra de la forma { varname }. En este caso, para cada operador de redirección excepto
>&-
y<&-
, el shell asignará un descriptor de archivo mayor que 10 y lo asignará a { varname }. Si>&-
o<&-
va precedido por { varname }, el valor de varname define el descriptor de archivo para cerrar.