Successivo: , Su: Variabili d'ambiente   [Contenuti][Indice]


2.5.1 Ricerca di programmi awk in una lista di directory.

Nella maggior parte delle implementazioni di awk si deve indicare il percorso completo di ogni file di programma, a meno che il file non sia nella directory corrente. Con gawk, invece, se la variabile nome-file impostata con le opzioni -f o -i non contiene un separatore di directory ‘/’, gawk cerca un file con quel nome in un elenco di directory (chiamato percorso di ricerca), scorrendole una per una.

Il percorso di ricerca è una stringa di nomi di directory separati da due punti13. gawk prende il percorso di ricerca dalla variabile d’ambiente AWKPATH. Se questa variabile non esiste, o se ha un come valore la stringa nulla, gawk usa un percorso di default (descritto tra poco).

La funzionalità del percorso di ricerca è particolarmente utile per costruire librerie di funzioni di awk. I file di libreria possono essere messi in una directory standard inclusa nel percorso di ricerca e richiamati sulla riga di comando con un nome-file breve. Altrimenti, si dovrebbe scrivere l’intero nome-file per ciascun file.

Usando l’opzione -i, o l’opzione -f, i programmi di awk scritti sulla riga di comando possono usare le funzionalità contenute nei file di libreria di awk (vedi la sezione Una libreria di funzioni awk). La ricerca del percorso non viene eseguita se gawk è in modalità di compatibilità, sia con l’opzione --traditional che con l’opzione --posix. Vedi la sezione Opzioni sulla riga di comando.

Se il file del codice sorgente non viene trovato con una prima ricerca, il percorso viene cercato di nuovo dopo aver aggiunto il suffisso ‘.awk’ al nome-file.

Il meccanismo di ricerca del percorso di gawk è simile a quello della shell. (Si veda The Bourne-Again SHell manual.) Un elemento nullo nel percorso indica la directory corrente. (Un elemento nullo è indicato iniziando o terminando il percorso con un segno di ‘:’ oppure mettendo due ‘:’ consecutivi [‘::’].)

NOTA: Per includere la directory corrente nel percorso di ricerca, si può aggiungere . come un elemento del percorso di ricerca, oppure inserire un elemento nullo.

Diverse passate versioni di gawk avrebbero effettuato anche una ricerca esplicita nella directory corrente, prima o dopo aver esaminato il percorso di ricerca. A partire dalla versione 4.1.2, questo non vale più; se si desidera una ricerca nella directory corrente, è necessario aggiungere . esplicitamente, oppure aggiungendo un elemento nullo al percorso di ricerca.

Il valore di default di AWKPATH è ‘.:/usr/local/share/awk’.14 Poiché . è incluso all’inizio, gawk cerca dapprima nella directory corrente, e poi in /usr/local/share/awk. In pratica, questo vuol dire che solo raramente ci sarà bisogno di cambiare il valore di AWKPATH.

Vedi la sezione File di inizializzazione della shell, per informazioni su funzioni che possono essere di aiuto per gestire la variabile AWKPATH.

gawk memorizza il valore del percorso di ricerca in uso in ENVIRON["AWKPATH"]. Questo consente di aver accesso al valore del percorso di ricerca in uso all’interno di un programma awk.

Sebbene la variabile ENVIRON["AWKPATH"] possa essere cambiata anche all’interno di un programma awk, questo non modifica il comportamento del programma in esecuzione. Questo comportamento ha una sua logica: la variabile d’ambiente AWKPATH è usata per trovare i file sorgenti del programma; una volta che il programma è in esecuzione, tutti i file sono stati trovati, e gawk non ha più bisogno di usare AWKPATH.


Note a piè di pagina

(13)

Punti e virgola in MS-Windows.

(14)

La versione di gawk che state usando potrebbe usare una directory diversa; ciò dipende da come gawk è stato compilato e installato. La directory effettiva è il valore di $(pkgdatadir) generato quando è stato configurato gawk. (Per ulteriori dettagli si veda il file INSTALL nella distribuzione in formato sorgente, e anche Compilare gawk per sistemi di tipo Unix. Non è comunque il caso di preoccuparsi per questo.)


Successivo: , Su: Variabili d'ambiente   [Contenuti][Indice]