Risposte:
Non si chiama bash_profile
, ma è il posto standard per la configurazione bash globale /etc/bash.bashrc
. È normale chiamarlo da /etc/profile
se la shell è bash. Ad esempio, nel mio /etc/profile
ho:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
In termini di utilizzo, /etc/profile
fornisce una configurazione a livello di sistema per tutte le shell compatibili con Bourne (sh, bash, ksh, ecc.). Normalmente non è necessario un equivalente /etc/bash_profile
, poiché l'intenzione del file di profilo è controllare il comportamento delle shell di accesso. Normalmente qualsiasi cosa tu voglia fare lì non sarà specifica per la bash. /etc/bash.bashrc
è specifico per bash e verrà eseguito per shell di login e non login.
Per complicare ulteriormente le cose, sembra che OS X non ne abbia nemmeno uno /etc/bash.bashrc
. Ciò è probabilmente dovuto al fatto che i Terminali in OS X funzionano come shell di login , quindi la distinzione viene persa:
Un'eccezione alle linee guida della finestra del terminale è Terminal.app di Mac OS X, che per impostazione predefinita esegue una shell di accesso per ogni nuova finestra del terminale, chiamando .bash_profile anziché .bashrc. Altri emulatori di terminali GUI possono fare lo stesso, ma la maggior parte tende a non farlo.
Non eseguo OS X, quindi la portata delle mie conoscenze finisce qui.
/etc/profile
in Ubuntu 12.04. Cosa suggeriresti invece se si volesse uno /etc/profile
che è stato eseguito solo sotto bash e nessun'altra shell sh-compatibile?
/etc/profile
di file per il mio sistema contiene un commento in alto che recita: # System-wide .profile for sh(1)
. Questo significa che profile
è sh
specifico? In sh
qualche modo viene eseguito prima bash
?
sh
è un sottoinsieme di bash
. /etc/profile
viene eseguito per sh
, bash
e per tutte le altre shell compatibili con Bourne.
/etc/bashrc
sul Mac, no /etc/bash.bashrc
. Sembra anche funzionare anche per /bin/sh
.
/etc/profile
è il globale bash_profile
. Non esiste un file specifico per bash, bash legge solo il file standard letto da tutta la shell in stile Bourne. È qui che puoi impostare variabili di ambiente a livello di sistema.
Vedi Esiste un file equivalente ".bashrc" letto da tutte le shell? per una panoramica generica dei file di avvio comuni di bash.
Questo non viene caricato /etc/profile
, quindi non /etc/profile.d/
viene caricato nulla (a differenza delle shell di login, vedere la fine).
Il file globale per questo è / etc / bashrc o /etc/bash.bashrc (a seconda del -DSYS_BASHRC=
flag impostato al momento della compilazione):
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
return
fi
PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
Di solito è una buona idea lasciare questo file così com'è (per quanto possibile) per evitare conflitti. La strategia che uso è simile a quella utilizzata dalle shell di login (/ etc / profile).
La mia strategia è di aggiungere un caricatore al file sopra:
# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d
# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
for script in /etc/bashrc.d/*.sh; do
test -r "$script" && . "$script"
done
unset item
fi
EOF
Ora posso facilmente aggiungere n personalizzazioni al file shell interattivo globale (bash) inserendo nuovi file .sh nella directory /etc/bashrc.d.
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
Puoi farlo con questo one-liner:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
Se, dopo aver letto questo, non sei convinto, fallo per convincerti:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
Apri un nuovo emulatore di terminale e cerca una parola comune nella tua directory utente come "the" usando grep
grep -r 'the'
Niente dovrebbe essere colorato. Fai la stessa cosa in una console virtuale facendo CTRLALTF1 (ricorda che probabilmente il tuo server X è in esecuzione su CTRLALTF7 in modo da poter tornare indietro. Se dimentichi, riavvia il desktop manager, ad esempio)
grep -r 'the'
produrrà risultati colorati come desiderato.
Niente dovrebbe essere colorato. Fai la stessa cosa in una console virtuale CTRLALTF1(ricorda che probabilmente il tuo server X è in esecuzione in CTRLALTF7modo da poter tornare indietro. Se dimentichi, riavvia il desktop manager, ad esempio)
grep -r 'the'
produrrà risultati colorati come desiderato.
Una shell di accesso è ciò che ottieni quando avvii una macchina o cambi console virtuali CTRLALTF1tramite FNthla console virtuale.
Una Shell di accesso si carica /etc/profile
mentre carica i /etc/profile.d/*.sh
file.
/etc/bash.bashrc
da una shell non interattiva./etc/profile
può essere letto da una shell non interattiva. Vedi la differenza tra Shell di accesso e Shell non di accesso?