Esporta PATH direttamente dalla riga di comando in Yosemite - dov'è il mio PERCORSO?

3

Voglio usare l'ultima versione di git che ho installato tramite Homebrew, quindi ho dovuto cambiare la mia variabile PATH per assicurare che OS X usi la versione Homebrew invece della versione obsoleta fornita con OS X e Command Line Tools . Questo tutorial consiglia semplicemente di eseguire:

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

Questo è quello che ho fatto e ha funzionato alla grande.

La mia domanda è: dove ha fatto questo comando modificare la mia variabile PATH ? Non ho affatto ~/.bashrc , ~/.bash_profile , o ~/.profile file nella mia home directory, ma quando I $ echo $PATH la PATH sembra corretta e quando si esegue which git e git --version tutto appare per indicare il posto giusto. Vedo i percorsi corretti elencati in /etc/paths ma se aggiungo un percorso di test utilizzando export dalla riga di comando, il percorso di test non appare in quel file.

Un'altra domanda: è un buon modo per modificare la mia variabile PATH ?

Domanda finale: quali sono i vantaggi e gli svantaggi di questo metodo?

Modifica: vedo i percorsi corretti elencati in /etc/paths ma se aggiungo un percorso di test utilizzando $ export PATH=/test:$PATH , il percorso di test non appare in /etc/paths/ , ma appare prima quando eseguo $ echo $PATH , tuttavia viene perso dopo il riavvio.

    
posta cfx 27.05.2015 - 17:44
fonte

1 risposta

3

Il 3 giugno hai pubblicato il seguente commento

@DavidAnderson Quindi, se ho capito bene, l'esecuzione del PATH di esportazione ... da una sessione di shell interattiva ha effetto solo su $ PATH per quella sessione e il percorso appena aggiunto non viene salvato da nessuna parte (e quindi non c'è alcun file in cui il percorso appena aggiunto può essere modificato). Ad esempio, se eseguo export PATH = / test: $ PATH ma intendevo esportare la / testing_123 dir, allora la mia migliore opzione è semplicemente avviare una nuova sessione piuttosto che tentare di localizzare e modificare un file contenente la dir errata / test (perché non esiste tale file). Corretto?

La mia risposta al tuo commento

Dalla pagina di manuale per bash, ho estratto quanto segue.

A parameter is an entity that stores values.  It can be a name, a
number, or one of the special characters listed below under Special
Parameters.  A variable is a parameter denoted by a name.  A variable 
has a value and zero or more attributes.

PATH è il nome di una variabile. Normalmente, questa variabile ha solo l'attributo export attivato. L'attributo export contrassegna una variabile per l'esportazione ai comandi successivi tramite l'ambiente. Il comando export attiva l'attributo export, ma nel caso della variabile PATH , l'attributo export è già attivo. Pertanto, per la variabile PATH , i successivi quattro comandi sono equivalenti.

PATH=/test:$PATH
export PATH=/test:$PATH
declare PATH=/test:$PATH
typeset PATH=/test:$PATH

Per quanto riguarda il tuo commento, hai ragione. Non esiste un file di questo tipo.

Nel caso di un errore del tipo che hai menzionato, non penso che l'avvio di una nuova sessione sarebbe l'opzione migliore. Vorrei inserire il comando

declare -p PATH

e quindi evidenzia l'output. È quindi possibile tagliare e incollare il testo come comando successivo. Prima di premere il tasto Invio, utilizza gli altri tasti per correggere l'errore.

Per ulteriori informazioni su questo argomento, consultare la pagina di manuale per bash. Inserisci il comando

man bash

o visitare il sito: bash - GNU Bourne-Again SHell .

In risposta alla tua modifica:

Sì, si suppone di perdere / testare la variabile PATH al riavvio. Questo è il motivo per cui devi inserire un comando export nel tuo file ~./profile .

Risposta originale:

Sembra confuso quando vengono eseguiti i file ~/.bashrc , ~/.bash_profile e ~/.profile . Forse questo aiuterà.

Ecco come ho configurato il mio computer. Ho tre file: ~/.profile , ~/.bashrc e ~/.bashcm . Se ti manca qualcuno di questi, puoi crearli.

Quando avvio l'applicazione Terminale o selezioni "Nuova finestra" da "Shell" sulla barra dei menu, viene invocata una shell di login bash interattiva. Questa shell esegue lo script ~/.profile all'avvio. Se lo desideri, puoi sostituire ~/.bash_profile o ~/.bash_login per ~./profile . Se viene avviata una shell bash interattiva che non è una shell di login, la shell legge ed esegue i comandi da ~/.bashrc . Lo scopo di ~/.bashcm è di fornire uno script comune che deve essere eseguito sia da ~/.profile sia da ~/.bashrc .

Ecco un esempio di un file .profile

echo in .profile
source ~/.bashcm
export PATH=$PATH:~/bin
echo exit .profile

Lo scopo dei comandi echo è quello di illustrare quando gli script vengono eseguiti. Una volta che hai dimestichezza, puoi commentare o eliminarli. Il file .profile esegue% script.bashcm, quindi modifica la variabile PATH ed esce. Un esempio di file .bashcm è mostrato sotto.

echo in bashcm
PS1='\h:\W \u\$ '
alias home='cd ~'
echo exit .bashcm

Oltre ai comandi echo, .bashcm imposta solo il prompt e un alias. Il file di esempio .bashrc mostrato di seguito esegue semplicemente lo script .bashcm . Di nuovo i comandi di eco sono solo a scopo illustrativo.

echo in .bashrc
source ~/.bashcm
echo exit .bashrc

Se avvio l'applicazione Terminale e inserisco i comandi

echo $PATH
alias
bash
echo $PATH
alias

in the window, I get the following.

Last login: Wed May 27 14:48:19 on ttys000
in .profile
in bashcm
exit .bashcm
exit .profile
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$ bash
in .bashrc
in bashcm
exit .bashcm
exit .bashrc
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$ 
    
risposta data 27.05.2015 - 22:07
fonte

Leggi altre domande sui tag