Che cosè PATH
in un sistema operativo Mac? Lho usato per installare strumenti globali da riga di comando, ma lunica documentazione che ho trovato sono tutorial per fare proprio questo, senza una vera spiegazione di ciò che sta accadendo sotto il cappuccio. Inoltre non ho trovato una pagina pertinente su Wikipedia .
Allora qual è lo scopo di PATH
e qual è la differenza tra /etc/paths
e ~/.bash_profile
**?
Ad esempio, nel mio paths
file, vedo questo:
/usr/bin /bin /usr/sbin /sbin /usr/local/bin
Ma nel mio ~/.bash_profile
, Vedo questo:
# Setting PATH for Python 2.7 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}" export PATH
È solo unaggiunta specifica dellutente al file paths
? Cosa “è tutta quella roba in paths
, come /usr/bin
?
Commenti
- Non ‘ combinare più domande in un unico post. Ciascuna delle tue domande sarebbe benvenuta qui separatamente, ma non tutte insieme in questo modo. Per favore riduci questo a una singola domanda, potresti combinare 1 e 2 ma le altre non hanno nulla a che fare con PATH in particolare. 3 viene risposto qui 4 viene spiegato qui e 5 non ha molto senso I ‘ ho paura. Né la tua domanda bonus, quali file sono binari? Gli script non lo sono.
- Ho modificato la mia domanda. Inoltre, ho trovato utili quei collegamenti. Grazie.
Risposta
1. Qual è lo scopo di PATH?
PATH
è una variabile dambiente che contiene un elenco separato da due punti di directory in cui la shell cercherà gli eseguibili che nominate sulla riga di comando senza fornire un percorso esplicito a loro (come nel tuo esempio jsdoc
). Quindi, se il tuo PATH
ha
/usr/bin:/bin:/home/bin
, qualsiasi eseguibile chiamato per nome verrà cercato in queste directory (in questordine) e il primo eseguibile trovato è quello eseguito.
2. Qual è la differenza tra / etc / routes e ~ / .bash_profile
Secondo questa domanda su ServerFault , /etc/paths
viene utilizzato per impostare PATH
a livello globale (ovvero a livello di sistema, per tutti gli utenti) mentre ~/.bash_profile
viene utilizzato per impostare le preferenze per utente (dove ~
sarà la home directory dellutente). Cosa è scritto in .bash_profile
può aggiungere al PATH
globale da /etc/paths
o sovrascriverlo completamente.
Per il record, /etc/paths
sembra essere una particolarità del sistema operativo MAC: non lho trovato su GNU / Linux, almeno.
Commenti
Risposta
Qual è lo scopo di PATH?
È così che shell trova i programmi. Quando digiti ls
, ad esempio, è in esecuzione un programma chiamato ls
che risiede in /bin
sulla maggior parte dei sistemi, incluso Mac OS X. La shell può trovarlo solo perché /bin
si trova nel PATH
.
La shell cerca i programmi in PATH
, da sinistra a destra. Se ci sono due ls
programmi sul tuo sistema e le loro directory sono entrambe nel tuo PATH
, troverà quello nella directory elencata primo nel tuo PATH
.
Qual è la differenza tra / etc / Routes e ~ / .bash_profile
I percorsi impostati in /etc/paths
vengono aggiunti a PATH
in avvio in tutte le shell su Mac OS X.
~/.bash_profile
è solo uno dei numerosi script di shell eseguiti da Bash allavvio, e molti di questi sono specifici di Bash. Pertanto, se modifichi la shell — Mac OS X include anche tcsh
e zsh
, ad esempio — le modifiche apportate a /etc/bashrc
non si applicano alla nuova shell.
Inoltre, /etc/paths
è un file di configurazione a livello di sistema, mentre ~/.bash_profile
è per utente. Se sul tuo Mac sono stati configurati più utenti interattivi, non vorresti aggiungere directory a /etc/paths
che non avresti voluto visualizzare in tutti “s PATH
. Lo stesso vale per /etc/bashrc
, tranne per quello che ovviamente si applica solo agli utenti che usano Bash come loro shell.
Qual è la differenza tra PATH e $ PATH e $ {PATH}?
Di solito vedi solo il variabile senza il sigillo quando imposti la variabile. FOO=bar
imposta la FOO
variabile di ambiente sulla stringa bar
. Se digiti set
, la shell ti mostra tutte le variabili dambiente, e in tal caso vedi anche la variabile senza sigillo.
$PATH
e ${PATH}
sono generalmente intercambiabili. Dicono alla shell di espandere la PATH
variabile ” S valore sul posto. La differenza ha a che fare con come e dove li usi. Ad esempio:
$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx
Nel secondo comando echo
, la shell non stampa nulla perché chiede alla shell di stampare una variabile chiamata FOOx
, che “non esiste; la shell considera le variabili inesistenti come vuote. Perché la terza echo
utilizza la sintassi delle parentesi graffe , consente alla shell di vedere che stai richiedendo la variabile FOO
e che x
è solo un altro carattere che vuoi stampare subito dopo .
Esiste un altro modo per ottenere lo stesso effetto senza parentesi graffe, a proposito:
$ echo "$FOO"x barx
Le variabili di ambiente vengono espanse in virgolette doppie e le virgolette separano x
dallespansione della variabile in modo che la shell faccia la cosa giusta.
Sto usando FOO
variabile dambiente qui solo per chiarezza. Tutto quello che” ho scritto sopra si applica anche a , poiché è solo unaltra variabile dambiente. I testi di esempio sarebbero solo molto più lunghi.
Cosa significa export PATH? Quando esportiamo?
Prendendo il precedente esempio FOO
, se dovessi eseguire un altro programma, Non vedrei la variabile FOO
perché non è stata esportata. Risiede solo in quellistanza di shell:
$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar
Quando eseguo per la prima volta una nuova shell bash
sotto quella che stavo già utilizzando, provo a mostrare il valore di FOO
, ottieni uno spazio vuoto perché FOO
non è stato esportato per essere visualizzato dai sottoprogrammi. Quindi sono uscito dalla seconda istanza bash
, lho esportata, ho eseguito di nuovo bash
e ora la seconda istanza vede il valore di FOO
.
Usi export
quando vuoi che i sottoprogrammi vedano i valori impostati nella shell e non lo usi quando non vuoi che ciò accada.
In genere, non esporto variabili temporanee negli script di shell, perché non voglio che cambino il modo in cui i programmi vengono eseguiti da quello script di shell si comportano.
Non risponderò a nessuna delle tue altre domande. Dovresti fare solo una domanda alla volta. Ho risposto solo a questo molti perché sono vagamente correlati. Tutto il resto appartiene a una domanda separata.
/etc/paths
su OSX.