Risposte:
In realtà, è bash
specificamente che legge .bashrc
(e /etc/bash.bashrc
). Ci sono molte conchiglie diverse.
La pagina man bash (di Brian Fox e Chet Ramey; anche la pagina informativa "Bash Startup Files" ) è il riferimento autorevole:
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
opzione file forzerà bash a leggere ed eseguire comandi da file anziché~/.bashrc
.Quando bash viene avviato in modo non interattivo, per eseguire uno script di shell, ad esempio, cerca la variabile
BASH_ENV
nell'ambiente, espande il suo valore se appare lì e utilizza il valore espanso come nome di un file per leggere ed eseguire. Bash si comporta come se fosse eseguito il seguente comando:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
ma il valore della
PATH
variabile non viene utilizzato per cercare il nome del file.
Il file è solo comandi di shell. In genere viene utilizzato per modificare i prompt, impostare le variabili di ambiente e definire le procedure della shell. Tradizionalmente, il file .profile
viene utilizzato per questo scopo, ma bash
ha così tante estensioni che ha bisogno del proprio file di avvio per gli utenti che vogliono inserire i bashismi nei file di avvio.
" Not a login shell " significa cose come l'avvio di script e di solito le finestre dei terminali avviate dai gestori delle finestre. A volte ho impostato i sistemi * nix per avere .bashrc
e BASH_ENV
solo sorgente .profile
. Finché non ci si allontana dai comandi della shell POSIX, si otterrà la stessa inizializzazione in qualsiasi shell.
È particolarmente prezioso quando lo sh
è davvero bash
, cosa che a volte accade. Per fare questo usa:
. .profile
Uno dei motivi per cui tutto ciò è così complesso è perché a volte le persone inseriscono elementi che producono output nei file di avvio della shell o impostano incondizionatamente prompt. Ciò causa molti problemi quando si eseguono programmi shell e comandi backtick all'interno delle lingue, per non parlare system(3)
dei programmi C. bash
Penso che il modo in cui viene avviato abbia un file in cui l'impostazione di output e prompt è OK e un file in cui non lo è. Tradizionalmente, un test di runtime verrebbe eseguito per distinguere l'interattività, ad esempio controllando se il prompt è impostato.
All'avvio di Bash, esegue i comandi in una varietà di script diversi.
Quando Bash viene invocato come shell di login interattiva, legge innanzitutto ed esegue i comandi dal file / etc / profile, se quel file esiste. Dopo aver letto quel file, cerca ~ / .bash_profile, ~ / .bash_login e ~ / .profile, in quell'ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile.
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'opzione --norc. L'opzione --rcfile forzerà Bash a leggere ed eseguire i comandi dal file invece di ~ / .bashrc.
http://en.wikipedia.org/wiki/Bash_(Unix_shell)
Ecco alcuni trucchi e suggerimenti:
http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
Proviamo a impostare il prompt in modo che possa visualizzare la data e il nome host attuali:
PS1="\d \h $ "
.profile
dopo .bash_profile
? Qualche logica?
Dovrebbe contenere vari comandi di "inizializzazione" per la shell, ad esempio:
alias ll='ls -l'
).ll='ls -l'
consente di digitare ll
per eseguire il ls -l
comando.