Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Ogni miglioria nelle comunicazioni rende la noia piu' terribile.

Frank Moore Colby 

Sondaggio:

Cosa pensi della pena di morte?

Dovrebbero abolirla in tutto il mondo
A volte ? necessaria
Ammazzateli tutti quei b... delinquenti
Va contro ogni principio umano
Non mi interessa

visualizza risultati


 

Metacaratteri

Nel capitolo precedente avete imparato alcuni comandi di manutenzione dei file: cp, mv e rm. Può capitare che vogliate interagire con più di un file alla volta. Per esempio, potreste voler copiare tutti i file che cominciano con data nella directory ~/backup: si può fare sia dando più comandi cp, sia elencando tutti i file in un'unica linea di comando; entrambi questi metodi, comunque, portano via molto tempo e avete molte possibilità di compiere errori. Una via migliore per farlo è scrivere:

/home/larry/report$ ls -F
1993-1 1994-1 data1 data5
1993-2 data-new data2
/home/larry/report$ mkdir ~/backup
/home/larry/report$ cp data* ~/backup
/home/larry/report$ ls -F ~/backup
data-new data1 data2 data5
/home/larry/report$

Come potete vedere, l'asterisco dice a cp di prendere tutti i file che iniziano con data e copiarli in ~/backup. Riuscite ad indovinare cosa farebbe cp d*w ~/backup? Ma cosa succede realmente ? Buona domanda. In realtà ci sono due caratteri speciali che vengono intercettati dalla shell bash . Il carattere "*", un asterisco, dice "sostituisci questa parola con tutti i file che verificano questa specifica". In questo modo, il comando cp data* ~/backup, come nell'esempio precedente, viene cambiato in cp data-new data1 data2 data5 ~/backup prima di venire eseguito.

Per vedere come funziona introduciamo un nuovo comando, echo. echo è un comando estremamente semplice; rimanda sullo schermo o stampa ogni parametro. Cioè:

/home/larry$ echo Ciao!
Ciao!
/home/larry$ echo Come va?
Come va?
/home/larry$ cd report
/home/larry/report$ ls -F
1993-1 1994-1 data1 data5
1993-2 data-new data2
/home/larry/report$ echo 199*
1993-1 1993-2 1994-1
/home/larry/report$ echo *4*
1994-1
/home/larry/report$ echo *2*
1993-2 data2
/home/larry/report$

Come potete vedere, la shell espande il metacarattere e passa tutti i file al programma che volete sia eseguito. Questo solleva una domanda interessante: cosa succede se non ci sono file che incontrano le specifiche del metacarattere? Provate echo /rc/fr*og e guardate cosa succede... bash passa testualmente la stringa con il metacarattere al programma. Bisogna dire anche che altre shell, come tcsh , invece di passare testualmente il metacarattere, rispondono No match. Ecco lo stesso comando sotto tcsh:

mousehouse>echo /rc/fr*og
echo: No match.
mousehouse>

L'ultima cosa che chiederete è come fare se volete che sullo schermo compaia data*, al posto della lista dei nomi dei file? Beh, sia sotto bash che tcsh, basta racchiudere la stringa tra virgolette:

/home/larry/report$ echo "data*"
data*
/home/larry/report$

oppure

mousehouse>echo "data*"
data*
mousehouse>

Oltre all'asterisco, anche il punto interrogativo viene interpretato dalla shell come carattere speciale. Un punto interrogativo corrisponde ad uno ed un solo carattere. Per esempio, ls /etc/?? mostra tutti i nomi di file di due lettere nella directory /etc.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2019 Cataldo Sasso