$ PATH è solo un file con una lista (in ordine di preferenza) di directory?

0

Ho difficoltà a capire esattamente come funziona $ PATH?

Sono su un Mac .. Se installo Python con Homebrew, installerà Python nella directory / opt / local / bin.

Ora supponendo che Homebrew non abbia apportato alcuna modifica al mio profilo bash, se eseguo uno script Python generico, questo verrà eseguito utilizzando il sistema incluso in Python che si trova nella Libreria, penso.

La mia comprensione è che se vado nel mio profilo di bash e aggiungo questa linea:

export PATH=/opt/local/bin:$PATH

quindi aggiungerà queste directory in cima all'elenco.

Credo che la domanda che ho è, perché aggiungo questa linea qui. Perché non posso andare direttamente alla fonte che penso sia $ PATH e aggiungere la linea manualmente lì.
$ PATH è un file? E se sì, dove si trova?

    
posta 01.01.2016 - 02:48
fonte

1 risposta

2

Il percorso della shell (ovvero PATH) per un utente in OSX è una variabile che definisce un insieme di posizioni nel file system in cui l'utente può utilizzare determinate applicazioni, comandi e script della shell senza la necessità di specificare il percorso completo per quel comando o programma nel Terminale.

Se inserisci abc in Terminale verrà eseguita la prima occorrenza di abc in uno dei percorsi definiti in PATH.

Per accedere o stampare la variabile PATH devi usare $ PATH.

Esempio:

echo $PATH

La variabile PATH ha una parte generale e una parte specifica dell'utente.

1. Parte generale:

La parte generale è definita dal file (superiore) / etc / paths e dal contenuto (inferiore) della cartella /etc/paths.d .

Il contenuto predefinito del file / etc / paths (in OS X) è:

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

La cartella predefinita /etc/paths.d è vuota. Sui sistemi precedenti con un'installazione X11 la cartella contiene un file denominato 50-X11 con il contenuto

/usr/X11/bin

che aggiunge un percorso aggiuntivo ( / usr / X11 / bin ) a PATH.

Il prefisso - appena definito definisce l'ordine di caricamento.

La mia cartella /etc/paths.d contiene i seguenti file:

/etc/paths.d/40-mysql    #file content: /usr/local/mysql/bin
/etc/paths.d/50-X11      #file content: /usr/X11/bin
/etc/paths.d/60-testdisk #file content: /usr/local/testdisk
/etc/paths.d/70-git      #file content: /usr/local/git/bin

Il PATH risultante è

echo PATH$ 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin

2. Parte specifica dell'utente:

La parte specifica dell'utente è definita dal file ~ / .bash_profile . Se hai creato un raccoglitore di cartelle nella tua cartella utente e hai installato alcune app lì puoi aggiungere la seguente riga in ~ / .bash_profile

export PATH="/Users/username/bin:$PATH"

o

export PATH="$PATH:/Users/username/bin"

La prima voce preferibilmente esegue un comando abc trovato nella cartella / bin dell'utente, il secondo un comando abc trovato nel percorso generale prima di eseguire uno identico denominato nella cartella ~ / bin.

Questa parte di PATH definita da .bash_profile è efficace solo per il rispettivo utente.

Per aggiungere il percorso inserito in .bash_profile al PATH corrente, devi immediatamente generare il file una volta:

source ~/.bash_profile

3. Percorsi temporanei

Immettendo export PATH="/Users/username/bin:$PATH" o export PATH="$PATH:/Users/username/bin" in Terminale puoi aggiungere temporaneamente un percorso.

Questa parte di PATH viene persa dopo aver chiuso la finestra del Terminale, disconnettendo o riavviando il Mac.

Esempi (utilizzando la parte generale dall'alto):

Il file ~ / .bash_profile contiene export PATH="/Users/username/bin:$PATH" e si emette in Terminal export PATH="/Users/username/bin2:$PATH" , quindi il PATH risultante è:

/Users/username/bin2:/Users/username/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin
\____temp. path_____/

Il file ~ / .bash_profile contiene export PATH="$PATH:/Users/username/bin" e si emette in Terminal export PATH="/Users/username/bin2:$PATH" , quindi il PATH risultante è:

/Users/username/bin2:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin:/Users/username/bin
\____temp. path_____/

Riepilogo

PATH (o $ PATH) è definito da diversi file: / etc / paths, i file in /etc/paths.d e ~ / .bash_profile e in caso di aggiunta di un percorso temporaneo con ulteriore contenuto RAM.

    
risposta data 01.01.2016 - 15:11
fonte

Leggi altre domande sui tag