<Precedenti | Contenuti | Succ.>
Sostituzione del comando
La sostituzione dei comandi ci consente di utilizzare l'output di un comando come espansione:
[io@linuxbox~]$ echo $(ls)
Documenti desktop ls-output.txt Musica Immagini Modelli pubblici Video
[io@linuxbox~]$ echo $(ls)
Documenti desktop ls-output.txt Musica Immagini Modelli pubblici Video
Uno dei miei preferiti recita più o meno così:
[io@linuxbox~]$ ls -l $(quale cp)
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
[io@linuxbox~]$ ls -l $(quale cp)
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
Qui abbiamo passato i risultati di quale cp come argomento per il ls comando, ottenendo così l'elenco di cp programma senza doverne conoscere il percorso completo. Non siamo limitati a semplici comandi. È possibile utilizzare pipeline intere (solo output parziali)
mostrato):
[io@linuxbox~]$ file $(ls -d /usr/bin/* | grep zip)
/usr/bin/bunzip2: collegamento simbolico a `bzip2'
/usr/bin/bzip2: eseguibile ELF LSB a 32 bit, Intel 80386, versione 1 (SYSV), collegato dinamicamente (utilizza librerie condivise), per GNU/Linux 2.6.9, spogliato
/usr/bin/bzip2recover: eseguibile ELF LSB a 32 bit, Intel 80386, versione 1 (SYSV), collegato dinamicamente (utilizza librerie condivise), per GNU/Linux 2.6.9, spogliato
/usr/bin/funzip: eseguibile ELF LSB a 32 bit, Intel 80386, versione 1 (SYSV), collegato dinamicamente (utilizza librerie condivise), per GNU/Linux 2.6.9, spogliato
/usr/bin/gpg-zip: eseguibile di testo dello script della shell Bourne
/usr/bin/gunzip: collegamento simbolico a `../../bin/gunzip'
/usr/bin/gzip: collegamento simbolico a `../../bin/gzip'
/usr/bin/mzip: collegamento simbolico a `mtools'
[io@linuxbox~]$ file $(ls -d /usr/bin/* | grep zip)
/usr/bin/bunzip2: collegamento simbolico a `bzip2'
/usr/bin/bzip2: eseguibile ELF LSB a 32 bit, Intel 80386, versione 1 (SYSV), collegato dinamicamente (utilizza librerie condivise), per GNU/Linux 2.6.9, spogliato
/usr/bin/bzip2recover: eseguibile ELF LSB a 32 bit, Intel 80386, versione 1 (SYSV), collegato dinamicamente (utilizza librerie condivise), per GNU/Linux 2.6.9, spogliato
/usr/bin/funzip: eseguibile ELF LSB a 32 bit, Intel 80386, versione 1 (SYSV), collegato dinamicamente (utilizza librerie condivise), per GNU/Linux 2.6.9, spogliato
/usr/bin/gpg-zip: eseguibile di testo dello script della shell Bourne
/usr/bin/gunzip: collegamento simbolico a `../../bin/gunzip'
/usr/bin/gzip: collegamento simbolico a `../../bin/gzip'
/usr/bin/mzip: collegamento simbolico a `mtools'
In questo esempio, i risultati della pipeline sono diventati l'elenco degli argomenti del filetto comando.
Esiste una sintassi alternativa per la sostituzione dei comandi nei vecchi programmi shell che è supportata anche in bash. Utilizza virgolette inverse invece del simbolo del dollaro e delle parentesi:
[io@linuxbox~]$ ls -l `quale cp`
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
[io@linuxbox~]$ ls -l `quale cp`
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp