¿Qué hace 'exec {fd} </ dev / watchdog' en Bash?


28

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:


34

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

Estoy seguro de que tienes razón, porque (1) recuerdo haberlo leído en alguna parte, y (2) lo intenté (y funciona). Pero no pude encontrarlo documentado en ninguna parte. (Por supuesto, tenía menos de diez minutos para buscar antes de publicar su respuesta). ¿Puede proporcionar una referencia de dónde está documentado?
Scott

2
Consulte la página de manual, segundo párrafo de la sección REDIRECTIONS. Realmente no te llama la atención, ya que no dan un ejemplo explícito.
chepner

Tienes razón, lo extrañé en man bash, pero es allí donde dijiste. Cabe señalar que cualquier palabra, no solo fd funcionará entre llaves, y que asigna un fd> = 10.
Gregg Leventhal

3
@Scott, no solo está en bash, sino que también está en bash 4.1 o más reciente (por lo tanto, no está disponible en las versiones 3.2 que todavía se usan en MacOS).
Charles Duffy

2
Sin /dev/watchdogembargo, @CharlesDuffy tampoco existe en Mac OS X; Es un dispositivo específico de Linux.
duskwuff

11

La forma:

{var}<filename

hecho que el archivo de shell filenamepara 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), bashlo copió mucho más tarde en la bash-4.1-alphade 2010. zshTambién hizo el cambio antes de lo que basha partir zsh 4.3.4de 2007.


2

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.