Cos'è il file .bashrc?
Unix shells quando si inizia a leggere il file .bashrc
ed eseguire i comandi in esso scritti. Cos'è questo file e cosa esegue?
Unix shells quando si inizia a leggere il file .bashrc
ed eseguire i comandi in esso scritti. Cos'è questo file e cosa esegue?
In realtà, è proprio bash
che si legge .bashrc
(e /etc/bash.bashrc
). Ci sono molte conchiglie diverse.
La bash man page (di Brian Fox e Chet Ramey; anche info page “Bash Startup Files” ) è il riferimento autorevole:
Quando viene avviata una conchiglia interattiva che non è una conchiglia di login, bash legge ed esegue i comandi da
~/.bashrc
, se quel file esiste. Questo può essere inibito usando l'opzione--norc
. L'opzione--rcfile
file costringerà bash a leggere ed eseguire comandi da file invece di~/.bashrc
.Quando bash viene avviato in modo non interattivo, per eseguire uno script di shell, per esempio, cerca la variabile
BASH_ENV
nell'ambiente, espande il suo valore se vi appare, e usa il valore espanso come nome di un file da 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 variabile
PATH
non viene utilizzato per cercare il nome del file.
Il file è solo un comando di shell. Viene tipicamente usato per modificare i prompt, impostare le variabili d'ambiente e definire le procedure di shell. Tradizionalmente, il file .profile
è usato per questo scopo, ma bash
ha così tante estensioni che ha bisogno di un proprio file di avvio per gli utenti che vogliono mettere bashisms nei file di avvio.
“Non una shell di login” significa cose come lanci di script e di solito finestre di terminale avviate da gestori di finestre. A volte ho impostato i sistemi *nix per avere .bashrc
e BASH_ENV
solo source .profile
. Finché non ci si allontana dai comandi della shell POSIX, allora si ottiene la stessa inizializzazione in qualsiasi shell.
È particolarmente utile quando sh
è davvero bash
, cosa che a volte accade. Per fare questo uso:
. .profile
``` &001
Uno dei motivi per cui tutto questo è così complesso è che a volte le persone mettono cose che producono output nei file di avvio della shell, oppure impostano incondizionatamente dei prompt. Questo causa molti problemi quando si eseguono programmi shell e comandi backtick all'interno dei linguaggi, per non parlare di `system(3)` dei programmi C. Il modo in cui `bash` si avvia è progettato, credo, per avere un file dove l'output e l'impostazione dei prompt è OK e un file dove non lo è. Tradizionalmente, un test di run-time verrebbe fatto per distinguere l'interattività, per esempio, controllando se il prompt è impostato.
Quando Bash si avvia, esegue i comandi in una varietà di script diversi.
Quando Bash viene invocato come shell di login interattiva, prima legge 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 quest'ordine, e legge ed esegue i comandi dal primo che esiste e che è leggibile.
Quando esce una shell di login, Bash legge ed esegue comandi dal file ~/.bash_logout, se esiste.
Quando viene avviata una shell interattiva che non è una shell di login, Bash legge ed esegue comandi da ~/.bashrc, se quel file esiste. Questo può essere inibito utilizzando l'opzione –norc. L'opzione –rcfile file costringerà Bash a leggere ed eseguire comandi da 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 &003
Proviamo ad impostare il prompt in modo che possa visualizzare la data e il nome host di oggi:
PS1="\d \h $ "
Dovrebbe contenere vari comandi di “inizializzazione” per la vostra shell, per esempio:
alias ll='ls -l'
).