Risposte:
Non si chiama bash_profile, ma è il posto standard per la configurazione bash globale /etc/bash.bashrc. È normale chiamarlo da /etc/profilese la shell è bash. Ad esempio, nel mio /etc/profileho:
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/profilefornisce 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/profilein Ubuntu 12.04. Cosa suggeriresti invece se si volesse uno /etc/profileche è stato eseguito solo sotto bash e nessun'altra shell sh-compatibile?
/etc/profiledi file per il mio sistema contiene un commento in alto che recita: # System-wide .profile for sh(1). Questo significa che profileè shspecifico? In shqualche modo viene eseguito prima bash?
shè un sottoinsieme di bash. /etc/profileviene eseguito per sh, bashe per tutte le altre shell compatibili con Bourne.
/etc/bashrcsul 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/profilementre carica i /etc/profile.d/*.shfile.
/etc/bash.bashrcda una shell non interattiva./etc/profilepuò essere letto da una shell non interattiva. Vedi la differenza tra Shell di accesso e Shell non di accesso?