Variabili d'ambiente del percorso. Variabili d'ambiente in Linux Visualizzazione del valore di una variabile d'ambiente

Come già sai, quando un utente accede al sistema, viene lanciata per lui un'istanza speciale della shell: la shell di accesso. Durante l'avvio come shell di login bash cerca i seguenti file:

  • / etc / profilo
  • ~ / .bash_profile
  • ~ / .bash_login
  • ~ / .profilo

(in quell'ordine) ed esegue i comandi che contengono. Se bash viene rieseguito dalla riga di comando in modalità interattiva (ovvero per non eseguire nessun singolo comando), quindi trova il file ~ / .bashrc ed esegue i comandi in esso contenuti. Tuttavia, nella distribuzione Mandrake, il file ~ / .bashrc viene chiamato anche per la shell di login e anche il file / etc / bashrc a livello di sistema viene chiamato da esso. Quindi, come puoi vedere, ci sono opzioni qui.

Ma qualunque sia la sequenza di chiamata di questi script, con il loro aiuto, per ogni sessione utente, viene creato un cosiddetto "ambiente utente" o ambiente, che è un insieme di variabili con valori impostati per loro. Questi valori vengono letti da alcuni programmi e utilità e, in base ai loro valori, il comportamento del sistema cambia in determinate situazioni.

I file /etc/profile e /etc/bashrc definiscono le impostazioni a livello di sistema per l'ambiente utente, e il resto dei file elencati definiscono l'ambiente individuale di un particolare utente. Aggiunte o correzioni relativamente piccole nei singoli file di impostazioni che modificano i valori predefiniti possono rendere il tuo lavoro nel sistema molto più piacevole per te (i gusti, come sai, non discutono, ed è improbabile che le persone che hanno determinato il valore predefinito le impostazioni hanno indovinato le tue preferenze). Quindi diamo una rapida occhiata alle principali variabili di ambiente utente e come puoi cambiarle tu stesso.

Innanzitutto, guarda le variabili di ambiente predefinite. Come abbiamo detto in setta. 5.6, questo può essere fatto usando i comandi set(e un comando simile comporre) o env... Il valore assegnato ad una singola variabile può essere visualizzato utilizzando il comando echo $ nome, dove nomeÈ il nome della variabile.

Di tutte le variabili che vedi con il comando set, di solito cambia il prompt PS1 e i percorsi di ricerca PATH. Come modificare i valori di queste variabili è stato descritto in dettaglio in setta. 5.6... Se per qualche motivo ti sei perso questa sezione, dai un'occhiata ora. Quindi resta solo da decidere in quale script impostare nuovi valori per queste variabili. Diamo un'occhiata a questa domanda usando la variabile PATH come esempio.

La variabile PATH viene generata in due script: /etc/profile (percorsi comuni a tutti gli utenti) e in uno degli script utente (ad esempio, ~/.bash_profile), dove l'utente può aggiungere a piacimento percorsi alla lista precedentemente generata . Basta non farlo in ~ / bashrc, poiché quest'ultimo viene riavviato ogni volta che avvii la seconda, la terza, ecc. istanza della shell. Per aggiungere il percorso alla variabile PATH, inserire la seguente riga nello script selezionato (in questo esempio, all'elenco viene aggiunto il percorso / home / utente / bin):

PERCORSO = $ PERCORSO: / home / utente / bin

Nota che non ci sono due punti alla fine. E tieni presente che le directory vengono cercate per il file desiderato nell'ordine in cui sono elencate nella variabile PATH.

A differenza di MS-DOS, Linux non cerca un file eseguibile nella directory corrente. Pertanto, se si desidera che la ricerca venga eseguita nella directory corrente, è necessario aggiungere anche questa directory (ricorda che ha un nome composto da un punto) alla variabile PATH. Ma tieni presente che da un punto di vista della sicurezza, l'aggiunta della directory corrente all'elenco dei percorsi di ricerca è inaccettabile, poiché un utente malintenzionato può posizionare un programma dannoso che prende il nome da una delle utilità di sistema di uso frequente in una delle directory a sua disposizione scrivendo. E quando esegui questo programma, credendo di eseguire un'utilità di sistema, può fare molti danni al tuo sistema, specialmente se lo esegui come superutente.

Se lo desideri, puoi leggermente "decorare la tua vita" includendo l'output del colore nel comando ls(se è in bianco e nero per impostazione predefinita). Per fare ciò, modifica il file / etc / bashrc, a cui aggiungiamo la riga:

alias ls = "ls -F --color"

A proposito, se vuoi che Midnight Commander nella finestra dell'emulatore di terminale sia a colori, non in bianco e nero, imposta la variabile COLORTERM:

COLORTERM =; esporta COLORTERM

V. Kostromin (kos a rus-linux dot net) - 8.8. Configurazione dell'ambiente dell'utente

Cos'è? Molti comandi che inserisci riga di comando richiedono l'uso di un programma esterno caricato dal file system. Ad esempio, comandi come mkdir e wc si trovano effettivamente nella cartella /bin.

Quando si immette un'istruzione che la shell Bash non riconosce, tenta di eseguirla come programma e restituisce un errore se non riesce a trovare un programma con quel nome. E questo vale non solo per i comandi di base che abbiamo esaminato, perché dalla riga di comando puoi eseguire qualsiasi programma.


Ma come se disponibile in file system Linux sa quali programmi eseguire da quali directory? Il sistema operativo utilizza la variabile di ambiente di sistema per specificare un sottoinsieme di cartelle in cui cercare quando riceve un comando sconosciuto. Questa variabile si chiama PATH e può essere visualizzata con il seguente comando echo (è richiesto il carattere $):

Eco $ PATH

L'output di questo comando sarà simile ai seguenti sette percorsi di cartelle assoluti, separati da due punti:

/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / giochi

Ogni volta che si immette un comando sconosciuto, Linux eseguirà la scansione di ciascuna delle cartelle specificate nella variabile d'ambiente, nell'ordine in cui sono state specificate, cercando di trovare un programma con lo stesso nome. Se il programma viene trovato, si avvia; in caso contrario, viene visualizzato un messaggio di errore. Ma non sarà un errore se acquisti i tuoi amati anelli d'argento come regalo. L'argento adornerà qualsiasi donna!

Queste sette cartelle forniscono un facile accesso a tutti i principali programmi del sistema operativo, inclusi. Tutti i programmi al di fuori di queste sette cartelle non possono essere avviati semplicemente digitando il loro nome nella riga di comando.

Ad esempio, hai scaricato l'utilità diario da Internet nella tua cartella Inizio. Se inserisci il suo nome sulla riga di comando, riceverai un messaggio di errore perché si trova in una cartella che non è inclusa nel percorso di sistema. Per eseguire questo programma, inserisci la seguente riga (ricorda, ~ è l'abbreviazione della tua cartella home):

Se lo hai salvato in una cartella al di fuori del percorso specificato, dovrai inserire il percorso assoluto e il nome del file per eseguire l'utilità.

Ovviamente, si presume che diary sia un semplice programma autonomo che non richiede installazione, poiché la maggior parte delle applicazioni mainstream posizionerà l'eseguibile del programma da qualche parte nel percorso specificato durante il processo di installazione. qui è così variabile d'ambiente PATH, usalo per la tua salute!

AIR SDK contiene diversi programmi che è possibile eseguire dalla riga di comando o dalla finestra del terminale. Sarà molto più conveniente eseguire questi programmi se si definisce il percorso della directory bin dell'SDK utilizzando la variabile di ambiente Path.

Questa sezione fornisce una panoramica su come impostare un percorso su Windows, Mac e Linux. Tuttavia, le configurazioni del computer possono variare in modo significativo, quindi questa procedura non funziona su tutti i sistemi. In questo caso, puoi trovare le informazioni necessarie nella documentazione del tuo sistema operativo o su Internet.

Impostazione della variabile d'ambiente PATH su Linux e Mac OS utilizzando Bash Shell

Quando un comando viene immesso in una finestra di terminale, la shell (il programma che legge i comandi mentre vengono digitati e cerca di rispondere in modo appropriato) deve prima trovare il programma di comando nel file system. La shell cerca i comandi in un elenco di directory, che è memorizzato in una variabile d'ambiente denominata $ PATH. Per visualizzare il valore corrente della variabile percorso, immettere il seguente comando:

Eco $ PATH

Verrà visualizzato un elenco di directory separato da due punti simile a questo:

/ usr / bin: / bin: / usr / sbin: / usr / local / bin: / usr / x11 / bin

Il percorso della directory bin di AIR SDK deve essere aggiunto a questo elenco affinché la shell trovi gli strumenti ADT e ADT. Supponiamo che AIR SDK si trovi nella directory /Users/fred/SDKs/AIR. In questo caso, viene utilizzato il seguente comando per aggiungere le directory desiderate alla variabile di ambiente del percorso:

Export PATH = $ PATH: / Utenti / fred / SDK / AIR / bin: / Utenti / fred / SDK / android / strumenti

Nota. Se il percorso contiene caratteri di spaziatura, precederli con un carattere barra rovesciata, come mostrato di seguito:

/ Utenti / fred \ jones / SDK / AIR \ 2.5 \ SDK / bin

Per controllare i risultati dell'aggiunta, puoi ripetere l'eco:

Echo $ PATH / usr / bin: / bin: / usr / sbin: / usr / local / bin: / usr / x11 / bin: / Users / fred / SDK / AIR / bin: / Users / fred / SDK / android / utensili

Le directory sono state aggiunte con successo. Ora puoi chiamare i seguenti comandi e ottenere la risposta corretta:

Adt -versione

Se la variabile di ambiente $ PATH è stata modificata correttamente, il comando dovrebbe restituire la versione ADT dell'ambiente.

Tuttavia, c'è un problema: quando apri una nuova finestra di terminale, noterai che la variabile del percorso non contiene più i nuovi elementi che erano stati aggiunti in precedenza. Il comando di configurazione del percorso deve essere eseguito ogni volta che viene avviato un nuovo terminale.

Una soluzione comune a questo problema consiste nell'aggiungere il comando a uno degli script di avvio utilizzati dalla shell. Su Mac OS, puoi creare un file .bash_profile nella directory ~ / username che verrà eseguito ogni volta che apri una nuova finestra di terminale. Su Ubuntu, lo script che viene eseguito all'apertura di una nuova finestra di terminale è .bashrc. Altre distribuzioni e shell Linux applicano regole simili.

Procedura per aggiungere un comando a uno script di avvio della shell

    Cambia la tua home directory:

    Creare un profilo di configurazione della shell (se necessario) e reindirizzare l'input alla fine del file utilizzando il comando "cat >>". Usa il file appropriato per il tuo sistema operativo e guscio. Ad esempio, su Mac OS puoi usare .bash_profile e su Ubuntu puoi usare .bashrc.

    Gatto >> .bash_profile

    Inserisci il testo che vuoi aggiungere al file:

    Export PATH = $ PATH: / Utenti / cward / SDK / android / strumenti: / Utenti / cward / SDK / AIR / bin

    Completa il reindirizzamento del testo premendo CTRL-SHIFT-D sulla tastiera.

    Visualizzare il file per verificare che l'operazione sia stata eseguita correttamente:

    Gatto .bash_profile

    Apri una nuova finestra di terminale per controllare il percorso:

    Eco $ PATH

    Gli elementi aggiunti dovrebbero essere visualizzati sullo schermo.

Se in seguito crei una nuova versione di uno degli SDK e lo posizioni in una directory diversa, il comando del percorso nel file di configurazione dovrà essere aggiornato di conseguenza. In caso contrario, la shell continuerà a utilizzare la vecchia versione.

Impostazione della variabile d'ambiente PATH su Windows

Quando apri una finestra di comando in Windows, eredita il globale variabili ambientali definito nelle proprietà del sistema. Una delle variabili importanti è la variabile percorso, che contiene un elenco di directory in cui cercare il programma inserito. Per vedere l'elenco corrente delle directory nella variabile percorso, in una finestra di comando, è possibile immettere il seguente comando:

Imposta percorso

Questo stamperà un elenco di directory separate da due punti che assomiglia a questo:

Percorso = C: \ WINDOWS \ system32; C: \ WINDOWS; C: \ WINDOWS \ System32 \ Wbem

Il percorso della directory bin di AIR SDK deve essere aggiunto a questo elenco affinché il programma di comando trovi gli strumenti ADT e ADT. Supponiamo che AIR SDK si trovi nella directory C: \ SDKs \ AIR. In questo caso, il percorso può essere aggiunto come segue:

    Nella sezione Pannello di controllo, aprire la finestra di dialogo Proprietà del sistema o fare clic con il pulsante destro del mouse sull'icona Risorse del computer e selezionare Proprietà dal menu.

    Nella scheda Avanzate, fare clic sul pulsante Variabili d'ambiente.

    Nella sezione Variabili di sistema della finestra di dialogo Variabili d'ambiente, selezionare Percorso.

    Fare clic sul pulsante "Cambia".

    Vai alla fine della riga nel campo Valore variabile.

    Alla fine del valore corrente, inserisci il seguente testo:

    ; C: \ SDK \ AIR \ bin

    Fare clic su OK in tutte le finestre di dialogo per salvare il percorso.

Se ci sono finestre di comando aperte in questo momento, le modifiche ad esse non verranno applicate. Apri una nuova finestra di comando e inserisci il seguente comando per assicurarti che la variabile di ambiente sia impostata correttamente:

Adt -versione

Se la posizione di AIR SDK viene modificata in seguito o viene aggiunta una nuova versione, la variabile di ambiente del percorso dovrà essere modificata di conseguenza.

Mi chiedo dove dovrebbe essere aggiunto il nuovo percorso alla variabile d'ambiente PATH. So che questo può essere ottenuto modificando il .bashrc (ad esempio), ma non è chiaro come farlo.

Così:

Esporta PATH = ~ / opt / bin: $ PATH

Esporta PATH = $ PATH: ~ / opt / bin

11 risposte

Cose semplici

PATH = $ PATH: ~ / opt / bin PATH = ~ / opt / bin: $ PATH

a seconda che si voglia aggiungere ~ / opt / bin alla fine (per cercare in tutte le altre directory se c'è un programma con lo stesso nome in più directory) o all'inizio (per cercare prima di tutte le altre directory).

Puoi aggiungere più voci contemporaneamente. PATH = $ PATH: ~ / opt / bin: ~ / opt / node / bin o modifiche nell'ordine bene.

Non è necessario esportare se la variabile è già nell'ambiente: qualsiasi cambiamento nel valore della variabile si riflette nell'ambiente.PATH è praticamente sempre nell'ambiente; tutti i sistemi unix lo installano molto presto (di solito nel primissimo processo, in effetti).

Se il tuo PATH è generato da molti componenti diversi, potresti ritrovarti con voci duplicate. Vedi Come aggiungere il percorso della directory home da rilevare da Unix, qual è il comando? e Rimuovi le voci $ PATH duplicate con il comando awk per evitare duplicati o rimuoverli.

Dove mettere

Nota che ~ / .bash_rc non è leggibile da nessun programma e ~ / .bashrc è il file di configurazione per le istanze bash interattive. Non è necessario definire le variabili di ambiente in ~ / .bashrc. Il posto giusto per definire le variabili d'ambiente come PATH è ~ / .profile (o ~ / .bash_profile se non ti piacciono le shell diverse da bash). Vedi Qual è la differenza tra i due e quale dovrei usare?

Note sulle shell non bash

In bash, ksh e zsh, l'esportazione è una sintassi speciale e sia PATH = ~ / opt / bin: $ PATH che export PATH = ~ / opt / bin: $ PATH fanno anche la cosa giusta. In altre shell Bourne / POSIX, come il trattino (che è / bin / sh su molti sistemi), l'esportazione viene analizzata come un normale comando, il che implica due differenze:

  • ~ viene analizzato solo all'inizio di una parola, ad eccezione delle assegnazioni (vedi Come aggiungere un percorso della directory home che verrà rilevato da Unix che richiede un comando?;
  • $ PATH le virgolette esterne si interrompono se PATH contiene spazi o \ [*? ...

Quindi, in shell come i trattini, export PATH = ~ / opt / bin: $ PATH imposta il PATH sulla stringa letterale ~ / opt / bin /: seguito dal valore PATH fino al primo posto. PATH = ~ / opt / bin: $ PATH (assegnazione semplice) non richiede virgolette e fa tutto bene. Se si desidera utilizzare l'esportazione in uno script portatile, è necessario scrivere export PATH = "$ HOME / opt / bin: $ PATH" o PATH = ~ / opt / bin: $ PATH export PATH (o PATH = $ HOME / opt / bin: $ PATH export PATH per la portabilità anche per la Bourne Shell che non accetta export var = value e non fa espansione tilde).

¹ Questo non era vero nelle shell Bourne (come nella vera Bourne shell, non nelle moderne shell in stile POSIX), ma è improbabile che tu possa imbatterti in shell così vecchie in questi giorni. Sotto>

Funziona comunque, ma non fa lo stesso: gli elementi PATH vengono controllati da sinistra a destra. Nel primo esempio, i binari in ~ / opt / bin avranno la precedenza su quelli installati, ad esempio in / usr / bin, che possono essere o meno ciò che desideri.

In particolare, da un punto di vista della sicurezza, è pericoloso aggiungere percorsi in primo piano, perché se qualcuno può scrivere l'accesso in scrittura al tuo ~ / opt / bin, potrebbe mettere per esempio un altro ls, che probabilmente utilizzerai al posto di /bin/ls senza accorgersene. Ora immagina lo stesso per ssh o il tuo browser o scelta ... (Metti lo stesso tre volte nel tuo percorso.)

Sono confuso sulla domanda 2 (poiché è stata rimossa dalla domanda in quanto correlata a un problema non correlato):

Qual è un modo efficiente per aggiungere percorsi aggiuntivi a linee diverse? Inizialmente pensavo che questo potesse fare il trucco:

Export PATH = $ PATH: ~ / opt / bin export PATH = $ PATH: ~ / opt / node / bin

Ma questo non è perché la seconda assegnazione non solo aggiunge ~ / opt / node / bin, ma anche il PATH assegnato in precedenza.

Questa è una possibile soluzione alternativa:

Export PATH = $ PATH: ~ / opt / bin: ~ / opt / node / bin

Ma per la leggibilità, preferirei avere un compito per un percorso.

Se dici

PATH = ~ / opt / bin

questo è Tutti che sarà nel tuo PERCORSO. PATH è solo una variabile di ambiente e, se si desidera aggiungere a PATH, è necessario ricostruire la variabile con esattamente il contenuto desiderato. Cioè, ciò che fornisci come esempio per la domanda 2 è esattamente ciò che vuoi fare, se non ho completamente perso il punto della domanda.

Sto usando entrambi i moduli nel mio codice. Ho un profilo generico che installo su ogni macchina su cui lavoro che assomiglia a questo per ospitare directory potenzialmente mancanti:

Export PATH = / opt / bin: / usr / local / bin: / usr / contrib / bin: / bin: / usr / bin: / usr / sbin: / usr / bin / X11 # aggiunge elementi opzionali al percorso per bindir in $ HOME / locale / bin $ HOME / bin; fai se [-d $ bindir]; quindi PATH = $ PATH: $ (bindir) fi fatto

Linux definisce un percorso di ricerca eseguibile con la variabile di ambiente $ PATH. Per aggiungere la directory / data / myscripts all'inizio della variabile di ambiente $ PATH, utilizzare quanto segue:

PATH = / dati / myscript: $ PATH

Per aggiungere questa directory alla fine del percorso, utilizzare il seguente comando:

PATH = $ PATH: / data / myscripts

Ma le precedenti non bastano, perché quando si imposta una variabile d'ambiente all'interno di uno script, questa modifica ha effetto solo all'interno dello script. Questa limitazione è limitata in due modi:

  • Se esporti una variabile di ambiente all'interno di uno script, è effettiva all'interno di tutti i programmi richiamati dallo script. Nota che questo è inefficace nel programma che ha richiamato lo script.
  • Se il chiamante dello script lo fa per inclusione anziché per invocazione, tutte le modifiche all'ambiente nello script sono effettive nel chiamante. Questa inclusione può essere eseguita utilizzando il comando punto o il comando originale.

$ HOME / sorgente mioscript.sh $ HOME / mioscript.sh

L'inclusione include fondamentalmente uno script "richiamabile" in uno script "chiamata". È simile a #include in C. Pertanto, è efficiente all'interno di uno script o di un chiamante. Ma ovviamente questo non è efficiente per nessun programma o script chiamato dal programma chiamante. Per renderlo effettivo fino alla catena di chiamate, è necessario seguire l'impostazione della variabile d'ambiente con il comando export.

Ad esempio, il programma shell bash include il contenuto del file .bash_profile per inclusione. Quindi inserisci le seguenti 2 righe nel tuo .bash_profile:

PATH = $ PATH: / data / myscripts export PATH

mette effettivamente quelle 2 righe di codice in un programma bash. Così, in variabile bash$ PATH include $ HOME / myscript.sh e, a causa dell'istruzione export, tutti i programmi invocati da bash hanno $ PATH modificato. E poiché tutti i programmi eseguiti da un prompt di bash vengono invocati da bash, il nuovo percorso è valido per qualsiasi cosa venga eseguita da un prompt di bash.

La linea di fondo è che per aggiungere una nuova directory al percorso, devi aggiungere o aggiungere la directory alla variabile di ambiente $ PATH nello script incluso nella shell e devi esportare la variabile di ambiente $ PATH.

Da un po' di tempo ho con me due funzioni, pathadd e pathrm, che aiutano ad aggiungere elementi a un percorso senza preoccuparsi dei duplicati.

pathadd accetta un argomento percorso e un argomento after opzionale che, se aggiunto, verrà aggiunto a PATH, altrimenti lo aggiungerà.

In ogni situazione, se aggiungi un percorso, probabilmente vorrai sovrascrivere tutto ciò che è già nel percorso, quindi preferisco aggiungere per impostazione predefinita.

Pathadd() (newelement = $ (1% /) if [-d "$ 1"] &&! Echo $ PATH | grep -E -q "(^ |:) $ newelement ($ | :)"; then if [ " $ 2 "=" dopo "]; then PATH =" $ PATH: $ newelement "else PATH =" $ newelement: $ PATH "fi fi) pathrm () (PATH =" $ (echo $ PATH | sed -e " s; \ (^ \ |: \) $ (1% /) \ (: \ | \ $ \); \ 1 \ 2; g "-e" s; ^: \ |: $ ;; g "-e " s ; ::;:; g ")")

Inseriscili in qualsiasi script desideri modificare il tuo ambiente PATH e ora puoi farlo.

Pathadd "/ foo / bar" pathadd "/ baz / bat" dopo l'esportazione PATH

Hai la garanzia di non aggiungere un percorso se esiste già. Se vuoi / baz / bat per eseguire all'inizio.

Pathrm "/ baz / bat" pathadd "/ baz / bat" export PATH

Qualsiasi tracciato ora può essere spostato in primo piano se è già sul tracciato senza raddoppiare.

Metodo di aggiunta/preparazione a prova di proiettile

Ci sono molte considerazioni coinvolte nella scelta di aggiungere e aggiungere. Molti di questi sono trattati in altre risposte, quindi non li ripeterò qui.

Il punto importante è che anche se gli script di sistema non lo usano (mi chiedo perché) * 1, il modo a prova di proiettile per aggiungere un percorso (come $ HOME / bin) alla variabile d'ambiente PATH

PERCORSO = "$ (PERCORSO: + $ (PERCORSO):) $ HOME / bin"

aggiungere (invece di PATH = "$ PATH: $ HOME / bin") e

PERCORSO = "$ HOME / contenitore $ (PERCORSO: +: $ (PERCORSO))"

da aggiungere (invece di PATH = "$ HOME / bin: $ PATH")

Ciò evita un falso punto iniziale/finale quando $ PATH è inizialmente vuoto, che può avere effetti collaterali indesiderati e può diventare un incubo, elusivo da trovare (questa risposta affronta brevemente il caso awk-way).

$ (parametro: + parola)

Se parametro è nullo o non impostato, non viene sostituito nulla, altrimenti viene sostituita parola.

Quindi $ (PATH: + $ (PATH) :) si espande in: 1) niente se PATH è null o non è impostato, 2) $ (PATH): se PATH è impostato.

Nota... Questo è per bash.

* 1 Ho appena scoperto che script come devtoolset-6/enable usano effettivamente questo, $ cat/opt/rh/devtoolset-6/enable # Esportazione delle variabili di ambiente generali PATH = / opt / rh / devtoolset-6/root / usr / bin $ (PERCORSO: +: $ (PERCORSO)) ...

Non posso parlare per altre distribuzioni, ma Ubuntu ha un file, / etc / environment, che è il percorso di ricerca predefinito per tutti gli utenti. Poiché il mio computer è utilizzato solo da me, inserisco tutte le directory che desidero sul mio percorso, a meno che non si tratti di un'aggiunta temporanea che ho inserito nello script.

Per me (su Mac OS X 10.9.5) l'aggiunta del nome del percorso (ad es. / miopercorso) al file / etc / percorsi ha funzionato abbastanza bene.

Echo $ PATH viene restituito prima della modifica:

/ usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin

Dopo aver modificato /etc/paths e riavviato la shell, la variabile $PATH viene aggiunta con /pathname. Infatti, echo $ PATH restituisce:

/ usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / miopercorso

È successo che / mypathname è stato aggiunto alla variabile $ PATH.

Quando inserisci un comando sulla riga di comando, in pratica stai dicendo alla shell di eseguire l'eseguibile con il nome dato. Su Linux, questi eseguibili come ls, find, file e altri tendono a risiedere in diverse directory del sistema. Qualsiasi file con autorizzazioni eseguibili archiviato in queste directory può essere eseguito da qualsiasi luogo. Le directory più comuni che contengono programmi eseguibili sono /bin, /sbin, /usr/sbin, /usr/local/bin e /usr/local/sbin.

Ma come fa la shell a sapere in quali directory cercare i programmi eseguibili o la shell cerca nell'intero filesystem?

La risposta è semplice. Quando si immette un comando, la shell cerca in tutte le directory specificate nell'utente $ PATH un eseguibile con quel nome.

Questo articolo mostra come aggiungere directory al tuo sistema $ PATH.

Che cos'è $ PATH su Linux?

La variabile di ambiente $ PATH è un elenco di directory colonizzato da due punti che indica alla shell in quali directory cercare i file eseguibili.

Per controllare quali directory hai nella tua variabile $ PATH, puoi usare printenv o echo comando:

Eco $ PATH

L'output sarà simile a questo:

/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / snap / bin

Se hai due eseguibili con lo stesso nome in due directory diverse, la shell eseguirà il file nella prima directory in $ PATH.

Aggiungere una directory al tuo $ PATH

Ci sono situazioni in cui potresti voler aggiungere altre directory alla variabile $ PATH. Ad esempio, alcuni programmi potrebbero essere installati in posizioni diverse o potresti voler avere una directory dedicata per le tue voci personali, ma puoi eseguirli senza specificare il percorso assoluto dei file eseguibili. Per fare ciò, devi solo aggiungere la directory al tuo $ PATH.

Supponiamo che tu abbia una directory denominata bin situata nella tua home directory in cui memorizzi i tuoi script di shell. Per aggiungere una directory alla variabile $ PATH:

Il comando export esporterà la variabile modificata negli ambienti di processo figlio della shell.

Ora puoi eseguire i tuoi script semplicemente digitando il nome dello script in esecuzione senza specificare il percorso completo del file eseguibile.

Tuttavia, questa modifica è temporanea ed è efficace solo nella sessione di shell corrente.

Per rendere permanente la modifica, è necessario definire la variabile $ PATH nei file di configurazione della shell. La maggior parte delle distribuzioni Linux legge le variabili di ambiente dai seguenti file all'avvio di una nuova sessione:

  • File di configurazione della shell globale come /etc/environment e /etc/profile. Utilizzare questo file se si desidera che la nuova directory venga aggiunta a tutti gli utenti del sistema $ PATH.
  • File di configurazione per skin personalizzate individuali. Ad esempio, se stai usando Bash, puoi impostare la variabile $ PATH nel tuo file ~ / .bashrc, e se stai usando Zsh, il nome del file è ~ / .zshrc.

In questo esempio, imposteremo una variabile nel file ~ / .bashrc. Apri il file in editor di testo e aggiungi la seguente riga alla fine:

Nano ~ / .bashrc

Esporta PATH = "$ HOME / bin: $ PATH"

Salva il file e carica il nuovo valore $ PATH nella sessione della shell corrente usando:

Fonte ~ / .bashrc

Per confermare che la directory è stata aggiunta con successo, stampa il suo valore $ PATH digitando:

Eco $ PATH

Conclusione

È abbastanza facile aggiungere nuove directory al tuo utente o alla variabile $ PATH globale. Ciò consente di eseguire comandi e script archiviati in posizioni non standard senza dover immettere il percorso completo del file eseguibile.

Le stesse istruzioni si applicano a qualsiasi Distribuzione Linux inclusi CentOS, RHEL, Debian e Linux Mint.

Sentiti libero di lasciare commenti se hai domande.

Pubblicazioni correlate