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$