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.