Questo è letterale, {fd}
non è un segnaposto. Ho uno script che fa questo, e non proviene da nulla, né fa riferimento a {fd} altrove. Questo è valido?
exec {fd}</dev/watchdog
Questo è letterale, {fd}
non è un segnaposto. Ho uno script che fa questo, e non proviene da nulla, né fa riferimento a {fd} altrove. Questo è valido?
exec {fd}</dev/watchdog
Risposte:
Invece di dover scegliere un descrittore di file e spero che sia disponibile:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
questa notazione chiede alla shell di scegliere un descrittore di file che non è attualmente in uso, aprire il file per la lettura su quel descrittore e assegnare il numero alla variabile specificata ( fd
).
$ exec {fd}< /dev/watchdog
$ echo $fd
10
REDIRECTIONS
. Non ti salta davvero fuori, dal momento che non danno un esempio esplicito.
/dev/watchdog
, @CharlesDuffy non esiste su Mac OS X; è un dispositivo specifico di Linux.
Il modulo:
{var}<filename
ha reso il file aperto della shell filename
per leggere e archiviare il numero del descrittore di file in variabile var
. Non è consentito spazio tra {var}
operatori di reindirizzamento e e il numero del descrittore di file sarà maggiore o uguale 10
.
Questa caratteristica era originale ksh
(a partire dalla versione ksh93r nel 2006), bash
copiato molto più tardi in bash-4.1-alpha
a partire dal 2010. zsh
Inoltre ha fatto il cambiamento prima di quanto bash
da zsh 4.3.4
nel 2007.
Questo è spiegato nella sezione del manuale di Bash su Reindirizzamenti .
Ogni reindirizzamento che può essere preceduto da un numero descrittore di file può invece essere preceduto da una parola del modulo { varname }. In questo caso, per ogni operatore di reindirizzamento ad eccezione di
>&-
e<&-
, la shell assegnerà un descrittore di file maggiore di 10 e lo assegnerà a { varname }. Se>&-
o<&-
è preceduto da { varname }, il valore di varname definisce il descrittore di file da chiudere.