.bashrc
e NON.bash_profile
sono script. Sono file di configurazione che vengono acquistati ogni volta che vengono eseguiti in due modi:bash
La sezione INVOCATION della pagina man di bash è ciò che è rilevante.
Una shell di login è quella il cui primo carattere dell'argomento zero è a -
, oppure uno è iniziato con l' --login
opzione.
Una shell interattiva è una avviata senza argomenti non opzionali e senza l' -c
opzione il cui input ed errore standard sono entrambi collegati ai terminali (come determinato da isatty(3))
, o uno avviato con l' -i
opzione. PS1 è impostato e $-
include i
se bash
è interattivo, consentendo uno script shell o un file di avvio per testare questo stato.
I seguenti paragrafi descrivono come bash
esegue i suoi file di avvio. Se uno dei file esiste ma non può essere letto, bash segnala un errore. Le tilde sono espanse nei nomi dei file come descritto di seguito in
Tilde Expansion nella sezione EXPANSION .
Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l' --login
opzione, legge innanzitutto ed esegue i comandi dal file /etc/profile
, se quel file esiste. Dopo aver letto il file, si cerca ~/.bash_profile
,
~/.bash_login
e ~/.profile
, in questo ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile. L'
--noprofile
opzione può essere utilizzata all'avvio della shell per inibire questo comportamento.
Quando esce una shell di login, bash legge ed esegue i comandi dal file ~/.bash_logout
, se esiste.
Quando viene avviata una shell interattiva che non è una shell di accesso, bash legge ed esegue i comandi da ~/.bashrc
, se quel file esiste. Questo può essere inibito usando l' --norc
opzione. L' --rcfile file
opzione costringerà bash a leggere ed eseguire comandi dal file anziché ~/.bashrc
.
Puoi controllare quando vengono caricati tramite le opzioni della riga di comando --norc
e --noprofile
. Puoi anche ignorare la posizione da cui vengono caricati usando l' --rcfile
interruttore.
Come altri hanno già detto, puoi imitare il modo in cui questi file vengono caricati attraverso l'uso del source <file>
comando o l'uso del . <file>
comando.
È meglio pensare a questa funzionalità come segue:
- bash si avvia con un ambiente spoglio
- bash quindi apre uno di questi file (a seconda di come è stato invocato come interattivo o di accesso, e quindi ...
- ... riga per riga esegue ciascuno dei comandi all'interno del file ...
- quando completo dà il controllo sotto forma di un prompt, in attesa di input
Metodi per invocare
Questo argomento sembra emergere di tanto in tanto, quindi ecco un piccolo cheat dei vari modi di invocare bash
e cosa ne risulta. NOTA: Per aiutare ho aggiunto i messaggi "sourced $ HOME / .bashrc" e "sourced $ HOME / .bash_profile "nei rispettivi file.
chiamate di base
bash -i
$ bash -i
sourced /home/saml/.bashrc
bash -l
$ bash -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -il -or- bash -li
$ bash -il
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -c "..cmd .."
$ bash -c 'echo hi'
hi
NOTA: Notare che lo -c
switch non ha generato entrambi i file!
disabilitando la lettura dei file di configurazione
bash --norc
$ bash --norc
bash-4.1$
bash :noprofile
$ bash --noprofile
sourced /home/saml/.bashrc
bash --norc -i
$ bash --norc -i
bash-4.1$
bash --norc -l
$ bash --norc -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash --noprofile -i
$ bash --noprofile -i
sourced /home/saml/.bashrc
bash --noprofile -l
$ bash --noprofile -l
bash-4.1$
bash --norc -i -or- bash --norc -l
$ bash --norc -c 'echo hi'
hi
Modi più esoterici per chiamare bash
bash --rcfile $ HOME / .bashrc
$ bash -rcfile ~/.bashrc
sourced /home/saml/.bashrc
bash --norc --rcfile $ HOME / .bashrc
$ bash --norc -rcfile ~/.bashrc
bash-4.1$
Questi fallirono
bash -i -rcfile ~ / .bashrc
$ bash -i -rcfile ~/.bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
bash -i -rcfile .bashrc
$ bash -i -rcfile .bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: .bashrc: command not found
Probabilmente ce ne sono altri ma ottieni il punto, si spera ...
Cos'altro?
Infine, se sei così affascinato da questo argomento che ti piacerebbe leggere / esplorare di più su di esso, ti consiglio vivamente di dare un'occhiata alla Guida per principianti di Bash, in particolare la sezione: 1.2. Vantaggi del Bourne Again SHell . Le varie sottosezioni sotto quella, da "1.2.2.1. Invocazione" a "1.2.2.3.3. Comportamento interattivo della shell" spiegano le differenze di basso livello tra i vari modi in cui è possibile invocare bash
.