it-swarm-eu.dev

Cos'è il file .bashrc?

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

97
pineapple

In realtà, è bash in particolare che legge .bashrc (e /etc/bash.bashrc). Ci sono molte shell differenti.

La bash man page (di Brian Fox e Chet Ramey; anche info page "Bash Startup Files" ) è il riferimento autorevole:

Quando viene avviata una shell interattiva che non è una shell di accesso, bash legge ed esegue comandi da ~/.bashrc, se tale file esiste. Questo può essere inibito usando l'opzione --norc. L'opzione di file --rcfile costringerà bash a leggere ed eseguire comandi dal file anziché ~/.bashrc.

Quando bash viene avviato in modo non interattivo, per eseguire uno script 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 da leggere ed eseguire . Bash si comporta come se fosse stato 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 comandi della shell. Viene in genere utilizzato per modificare i prompt, impostare le variabili di ambiente e definire le procedure Shell. Tradizionalmente, il file .profile è usato per questo scopo, ma bash ha così tante estensioni che ha bisogno del proprio file di avvio per gli utenti che vogliono mettere bashisms nei file di avvio.

" Non è un login Shell " significa cose come lo script si avvia e in genere le finestre del terminale sono avviate dai gestori di finestre. A volte ho impostato i sistemi * nix per avere .bashrc e BASH_ENV solo per l'origine .profile. Finché non vi allontanate dai comandi di POSIX Shell, otterrete la stessa inizializzazione in qualsiasi Shell.

È particolarmente utile quando sh è in realtà bash, che a volte accade. Per fare questo usare:

. .profile

Una ragione è che tutto questo è così complesso perché a volte le persone mettono cose che producono output nei file di avvio di Shell o impostano incondizionatamente prompt. Ciò causa molti problemi durante l'esecuzione di programmi Shell e comandi backtick all'interno delle lingue, per non parlare di system(3) dai programmi C. Il modo in cui bash si avvia è progettato, credo, per avere un file in cui l'output e l'impostazione del prompt sono OK e un file dove non lo è. Tradizionalmente, per distinguere l'interattività è necessario eseguire un test in fase di esecuzione, ad esempio per verificare se è impostato il prompt.

64
DigitalRoss

All'avvio di Bash, esegue i comandi in una varietà di script diversi.

Quando Bash viene invocato come shell di login interattiva, prima legge e esegue i comandi dal file/etc/profile, se tale 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 esistente ed è leggibile.

Quando termina 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 comandi da ~/.bashrc, se tale 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.

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 di oggi:

PS1="\d \h $ "
12
randomx

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

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