2009-09-30 15:54:44 +0000 2009-09-30 15:54:44 +0000
106
106

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?

Risposte (3)

69
69
69
2009-09-30 15:57:31 +0000

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.
12
12
12
2009-09-30 15:56:30 +0000

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 $ "
10
10
10
2009-09-30 15:56:46 +0000

Dovrebbe contenere vari comandi di “inizializzazione” per la vostra shell, per esempio:

  • Creazione di alias utili (per esempio alias ll='ls -l').
  • Aggiunta di più directory a PATH.
  • Impostazione di nuove variabili d'ambiente.