Bash: La variabile d'ambiente PATH

La variabile d'ambiente PATH è una stringa contenente i percorsi delle directory separati dal simbolo : (due punti). Questa può essere intesa come un un contenitore di memoria che memorizza un dato che può cambiare durante l'esecuzione di un programma.

Nei sistemi GNU/Linux la variabile PATH può essere impostata nel file d'avvio della shell (ovvero la riga di comando). Quest'ultima è infatti uno strumento molto potente e facile da maneggiare, attraverso il quale si possono effettuare differenti operazioni.

Cosa è la shell

La shell è un software che fa parte del sistema e che ha il ruolo di elaborare dei comandi o righe di comandi digitate alla tastiera. Per vedere l'elenco delle shell disponibile sul sistema, vedi il file /etc/shells

cat /etc/shells

Un utente sotto Linux ha per default una shell di connessione.

Vedi il file /etc/passwd si vede in basso cosa del genere /bin/<qualcosa>. Si tratta della tua shell di connessione.

Per vedere le shell degli utenti, si può utilizzare il comando

cat /etc/passwd | cut -d: -f1,7

Per un utente specifico, si completa il comando nel modo seguente:

cat /etc/passwd | cut -d: -f1,7 | grep utente

Se siamo in modalità grafica si può aprire un terminale (xterm,gterm,konsole, ecc.) e quindi scrivere le righe di comando.

Nota Bene: sotto GNU/Linux si dispone di 6 console virtuale, al quale si accede nell'interfaccia grafica tramite la combinazione di tasti.

CTRL + ALT + Fn dove n è un cifra da 1 a 6.

Da una console virtuale, si può passare ad un'altra con la combinazione ALT + Fn, (con n da 1 a 6). Per tornare alla modalità grafica dalla console virtuale, fare ALT + F7.

In una shell, viene visualizzato un prompt, come ad esempio: utente@debian: ~$

Se al poste di $ c'è un #, allora si è accesso come root, se non viene cambiata la configurazione. Il prompt varia a seconda del sistema operativo e può essere modificato attraverso un'altra variabile d'ambiente PS1.

Visualizzare il contenuto della variabile PATH

Per visualizzare il contenuto di una variabile nella shell, si digita

echo $variabile

Nel caso della variabile PATH, si deve digitare

echo $PATH

Nota Bene: GNU/Linux sensibile alle maiuscole e fa la distinzione tra maiuscole e minuscole.

Per una visualizzazione più piacevole, è possibile utilizzare il comando

echo $PATH | tr : \\n

Ecco alcuni altri modi per visualizzare il contenuto di PATH.

printenv PATH
env | grep -i PATH | cut -d= -f2
perl -e 'print $ENV{PATH},"\n"'
perl -e '$,="\n" and print split(":",$ENV{PATH}),""'
perl -e '($_=$ENV{PATH})=~s/:|$/\n/g and print'

Sicuro che è meglio usare il comando più breve.

Approfondimento

Abbiamo visto che la variabile PATH contiene un elenco di directory separate da due punti :

Sono le directory nelle quale la shell cerca il comando che scriviamo alla tastiera. La ricerca si fa nell'ordine delle directory contenute nella variabile PATH.

Ad esempio:

utente@debian: ~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/utente/bin

Quando scriviamo un comando la shell cerca prima in /usr/local/bin, poi in /usr/bin, poi in /usr/bin/X11, poi in /usr/games e infine in /home/utente/bin. Quando la shell trova il comando allora si ferma di cercare eseguendo il comando trovato.

Un comando è possibile scriverlo usando:

Nome

Il percorso assoluto ( /bin/cat /etc/passwd )
Il percorso relativo ( usiamo "." o ".." in generale per dei programmi o script che non si trovano nella PATH)

. è la directory corrente

.. è la directory parente

Scrivendo un comando si può ottenere varie situazioni:

Il comando è unico ed è situato in una directory: in questo caso, tutto è semplice.
Se c'è un errore all'esecuzione, la causa è certamente la sintassi.
Soluzione : riferirsi al manuale del comando

il comando non è unico e si trova in diverse directory, ci sono qualche complicazioni: Supponiamo che abbiamo un comando che è in /usr/bin e che abbiamo installato dalle sorgenti una nuova versione del comando il cui eseguibile è in /usr/local/bin.

Se il comando viene chiamato con il suo nome, cosa accade?

La shell guarda in PATH, a partire dalla prima directory incontrata. Nel nostro caso, trova il comando in /usr/local/bin quindi è /usr/local/bin/prog che viene eseguito.

Tuttavia, se si vuole comunque eseguire il comando prog, che è in /usr/bin, quindi occorre utilizzare il percorso assoluto /usr/bin/prog:

Il comando non è in nessuna directory. Il terzo caso contiene 2 situazioni:

Il comando esiste ma non si trova in nessuna directory di PATH

Il comando non esiste.

Nei due casi, il messaggio di errore sarà command not found, ma l'interpretazione non sarà la stessa.

Ci sono comandi che solo root può usare

Soluzione: Accedere come root con su o su -. Per altre informazioni consultare come utilizzare il comando "su".

Ci sono comandi che si trovano in una cartella che non si trova nella tua variabile PATH.

Soluzione: Usare il percorso assoluto oppure aggiungere la directory alla tua PATH

Hai creato uno script e non riesci ad eseguirlo qualsiasi il percorso specificato?

Soluzione: verificare i permessi di esecuzione sullo script ( ls -l script)

Il comando non esiste, in questo caso penso che sai cosa fare. se non lo sai ecco la soluzione: Chiedere all'amministratore di installarti il programma.

È possibile cercare l'esistenza di un comando usando sia whereis sia which:

whereis comando
which -a comando

Nel caso di which l'opzione -a permette di vedere i percorsi corrispondenti. Senza l'opzione -a viene visualizzato solo la prima directory che contiene il comando, ciò non è utile se il comando si trova in diverse directory.

Aggiungere una directory alla variabile PATH

Solo per la sessione corrente

Se si vuole aggiungere, per esempio, /home/user/mio_prog alla variabile PATH, nella shell digita:

export PATH=$PATH:/home/user/mio_prog

per avere la directory alla fine in PATH, oppure:

export PATH=/home/user/mio_prog/:$PATH

per avere la directory all'inizio in PATH. Ora è possibile usare il programma digitando solo il suo nome.

Se si sconnette la sessione, la variabile PATH riprende il suo valore di default, quindi /home/user/mes_prog non esiste più in PATH.

Permanente

Se si vuole configurare PATH in modo permanente, si deve modificare il file di configurazione della shell di connessione. Visto che di solito è la shell BASH che è usata, si deve modificare il file /home/user/.bashrc.

Per ciò, è possibile utilizzare un editore di testo, o semplicemente un comando per facilitarsi il compito. Eh si, di solito l'uso della riga di comando rende le cose più facile che l'uso del mouse, soprattutto nei compiti di amministrazione (opinione personale).

Ecco il comando:

echo 'export PATH=$PATH:/home/user/mio_prog' >> /home/user/.bashrc 

così ad ogni connessione la PATH contiene la directory /home/user/prog. Questa operazione può essere eseguita da utente user visto che si tratta del suo ambiente.

Come visualizzare variabile PATH

La variabile PATH è una variabile tra decine che contiene la shell. È possibile visualizzare le variabile del suo ambiente anche senza conoscere il loro nomi. Per farlo ci sono diversi comandi:

printenv
env
set
export

Foto: © Pixabay.

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Potrebbe anche interessarti
Il documento intitolato « Bash: La variabile d'ambiente PATH » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.