2016-03-02 13 views
9

Sono nuovo a bash, e ho visto le persone spesso aggiungere : dopo una directory quando si modifica PATH. Dopo aver cercato per un po ', non ho trovato una risposta per questo, o credo di non averlo cercato correttamente. Quindi spero di poter ottenere una risposta qui.Cosa fa il colon in PATH

Esempio:

/Users/chengluli/anaconda/bin:/Users/chengluli/.rbenv/shims:/ 

Cosa significa il : dopo bin e shims fare?

+0

mi rendo conto che la mia copia incompleta del percorso può essere fuorviante per gli altri, quindi mi incollare un tracciato normale qui: /Users/chengluli/anaconda/bin:/Users/chengluli/.rbenv/shims:/Users/ chengluli/.rbenv/bin: /Library/Frameworks/Python.framework/Versions/3.5/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin: /Users/chengluli/.rvm/bin Non sai se un editore potrebbe aiutarmi a modificare la domanda? Grazie! –

+0

Chiunque può [modificare], soprattutto te stesso, come il proprietario della domanda. Ma non penso che sia una cosa cruciale da sistemare; questa domanda è probabilmente un duplicato comunque. – tripleee

risposta

9

: è il separatore. La variabile PATH è a sua volta un elenco di cartelle "attraversate" quando si esegue un comando.

In questo caso, le cartelle sul PATH sono:

  • /Users/chengluli/anaconda/bin
  • /Users/chengluli/.rbenv/shims
  • /
+0

Grazie! Sei il primo a commentare, e tu hai spiegato bene, quindi sceglierò la tua come risposta! –

+1

Forse anche sottolineare che '/' è una cosa davvero folle da avere sul tuo 'PATH', mentre nell'esempio mancano alcune directory di sistema essenziali come'/usr/bin', '/ usr/local/bin', ecc. – tripleee

+0

@ tripleee, grazie! Ne sono consapevole, è un mio errore copiare un percorso incompleto come esempio. Lo modificherò nel commento qui sotto la mia domanda. –

0

Se si esegue ls -l 123 dalla riga di comando, si sta dicendo bash trova il comando chiamato ls nel filesystem. Tuttavia, ls è solo un nome file, bash ha bisogno del percorso assoluto di ls nel file system. Quindi bash cerca un file chiamato ls in un elenco di directory predefinite, uno per uno in ordine.

Un elenco di directory predefinite è memorizzato nella variabile PATH, separata da :.

3

Come altri hanno già detto, lo : è un separatore (Windows utilizza un punto e virgola ;). Ma probabilmente stai pensando a un trailing due punti allo fine della variabile PATH. Ad esempio:

/Users/chengluli/anaconda/bin:/Users/chengluli/.rbenv/shims: 

Dalle pagine man bash:

Una lunghezza zero (null) nome di directory nel valore del percorso indica la directory corrente. Un nome di directory null può apparire come due punti adiacenti o come due punti iniziali o finali.

Inserire la directory corrente nel PERCORSO è generalmente considerato un rischio per la sicurezza e una cattiva idea. È particolarmente pericoloso quando si usa l'utente root.

A proposito, bash utilizza $ PATH solo alla prima chiamata di un programma esterno, dopo di che utilizza una tabella hash. Vedere man bash e il comando di hash

-1

Th citazione di output del comando man bash

PERCORSO
Il percorso di ricerca per i comandi. È una lista di directory separate da due punti in cui la shell cerca i comandi (vedi ESECUZIONE DEL COMANDO sotto). Un nome di directory di lunghezza zero (null) nel valore di PATH indica la directory corrente.Un nome di directory null può apparire come due punti adiacenti o come due punti iniziali o finali. Il percorso predefinito è dipendente dal sistema ed è impostato dall'amministratore che installa bash. Un valore comune è ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin ''.

In caso di domande su script bash o variabile di ambiente, utilizzare prima man bash.