Cosè PATH su un sistema operativo Mac?

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

  • Li ho appena modificati, ma grazie per aver risposto a tutti!
  • @ggundersen Ho tagliato la mia risposta per adattarla alla tua domanda modificata.
  • @ggundersen potresti anche voler leggere la mia risposta e questa e link in esso relativi a /etc/paths su OSX.

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *