Cosa fa 'exec {fd} </ dev / watchdog' in Bash


28

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:


34

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

Sono sicuro che hai ragione, perché (1) ricordo di averlo letto da qualche parte, e (2) l'ho appena provato (e funziona). Ma non sono riuscito a trovarlo documentato da nessuna parte. (Certo, avevo meno di dieci minuti per cercare prima di pubblicare la tua risposta.) Puoi fornire un riferimento a dove è documentata?
— Scott,

2
Vedi la pagina man, secondo paragrafo della sezione REDIRECTIONS. Non ti salta davvero fuori, dal momento che non danno un esempio esplicito.
— Chepner,

Hai ragione, l'ho perso in Man Bash, ma è lì che hai detto. Va notato che qualsiasi parola, non solo fd, funzionerà tra parentesi graffe e che assegna un fd> = 10.
— Gregg Leventhal,

3
@Scott, non solo è solo in bash, ma è solo in bash 4.1 o versioni successive (quindi non disponibile nelle versioni 3.2 ancora utilizzate su MacOS).
— Charles Duffy,

2
Tuttavia /dev/watchdog, @CharlesDuffy non esiste su Mac OS X; è un dispositivo specifico di Linux.
— duskwuff,

11

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.


2

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.