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 filenameper 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), bashcopiato molto più tardi in bash-4.1-alphaa partire dal 2010. zshInoltre ha fatto il cambiamento prima di quanto bashda zsh 4.3.4nel 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.