Qual è il file .bashrc?


101

Le shell Unix all'avvio leggono il .bashrcfile ed eseguono i comandi scritti in esso. Che cos'è questo file e cosa esegue?


2
Prova ad aprire il file in un editor di testo: è in testo normale.
Will Bickford,

Risposte:


68

In realtà, è bashspecificamente 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' --norcopzione. L' --rcfileopzione 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_ENVnell'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 PATHvariabile 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 .profileviene utilizzato per questo scopo, ma bashha 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 .bashrce BASH_ENVsolo 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. bashPenso 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.


Buona risposta. Solo qualche citazione: 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.
smwikipedia,

2
Qualcuno sa cosa significa la parte rc di .bashrc / .zshrc?
WORMSS,

4
@WORMSS: bella domanda! Non sei il solo a chiedertelo .
Caleb Xu,

Forse rc significa configurazione di runtime.
Mike Diehn,

12

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 $ "

1
Perché è .profiledopo .bash_profile? Qualche logica?
Pacerier,

10

Dovrebbe contenere vari comandi di "inizializzazione" per la shell, ad esempio:

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

A che serve l'alias?
Ananas

2
@pineapple: un alias è un modo per eseguire un comando, che può essere lungo, con uno più breve. Ad esempio, l'alias ll='ls -l'consente di digitare llper eseguire il ls -lcomando.
Wuffers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.