Odpowiedzi:
To się nie nazywa bash_profile
, ale standardowym miejscem globalnej konfiguracji bash jest /etc/bash.bashrc
. Zwykle wywołuje się to, /etc/profile
jeśli powłoka jest bash. Na przykład w moim /etc/profile
mam:
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
Pod względem użytkowania /etc/profile
zapewnia konfigurację ogólnosystemową dla wszystkich kompatybilnych powłok Bourne (sh, bash, ksh itp.). Zwykle nie ma potrzeby równoważnika /etc/bash_profile
, ponieważ celem pliku profilu jest kontrolowanie zachowania powłok logowania. Zwykle wszystko, co chcesz zrobić, nie będzie specyficzne dla bash. /etc/bash.bashrc
jest specyficzny dla bash i będzie uruchamiany zarówno dla powłok zalogowanych, jak i niezalogowanych.
Aby jeszcze bardziej skomplikować, wygląda na to, że OS X nawet nie ma /etc/bash.bashrc
. Jest to prawdopodobnie związane z faktem, że Terminale w OS X domyślnie działają jako powłoki logowania , więc rozróżnienie zostaje utracone:
Wyjątkiem od wytycznych dotyczących okna terminala jest aplikacja Terminal.app w systemie Mac OS X, która domyślnie uruchamia powłokę logowania dla każdego nowego okna terminala, wywołując plik .bash_profile zamiast .bashrc. Inne emulatory terminala GUI mogą robić to samo, ale większość tego nie robi.
Nie uruchamiam OS X, więc na tym kończy się moja wiedza.
/etc/profile
w Ubuntu 12.04. Co byś zasugerował, gdyby ktoś chciał, /etc/profile
który byłby wykonywany tylko w trybie bash, a nie żadnej innej powłoki kompatybilnej z SH?
/etc/profile
plików dla mojego systemu zawiera komentarz na górze, który brzmi: # System-wide .profile for sh(1)
. Czy to znaczy, że profile
jest sh
specyficzne? Czy sh
jakoś działa wcześniej bash
?
sh
jest podzbiorem bash
. /etc/profile
jest wykonywany dla sh
, bash
i wszystkich innych powłok kompatybilnych z Bourne.
/etc/bashrc
na komputerze Mac, a nie /etc/bash.bashrc
. Wydaje się również, że działa /bin/sh
.
/etc/profile
jest globalny bash_profile
. Nie ma pliku, który byłby specyficzny dla bash, bash po prostu czyta standardowy plik odczytywany przez wszystkie powłoki w stylu Bourne'a. Tam możesz ustawić ogólnosystemowe zmienne środowiskowe.
Zobacz Czy istnieje plik równoważny „.bashrc” odczytywany przez wszystkie powłoki? ogólny przegląd typowych plików startowych bash.
To się nie ładuje /etc/profile
, więc nic się /etc/profile.d/
nie ładuje (w przeciwieństwie do powłok logowania, patrz koniec).
Globalny plik do tego to / etc / bashrc lub /etc/bash.bashrc (w zależności od -DSYS_BASHRC=
flagi ustawionej podczas kompilacji):
# 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"
Zwykle dobrym pomysłem jest pozostawienie tego pliku w stanie, w jakim się znajduje (tak dużo, jak to możliwe), aby uniknąć konfliktów. Strategia, z której korzystam, jest podobna do strategii używanej przez powłoki (/ etc / profile).
Moją strategią jest dodanie modułu ładującego do powyższego pliku:
# 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
Teraz mogę łatwo dodać n dostosowań do globalnego interaktywnego pliku powłoki (bash), umieszczając nowe pliki .sh w katalogu /etc/bashrc.d.
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
Możesz to zrobić za pomocą tej linijki:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
Jeśli po przeczytaniu tego nie będziesz przekonany, zrób to, aby się przekonać:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
Otwórz nowy emulator terminala i wyszukaj w katalogu użytkownika kilka popularnych słów, takich jak „the”, używając grep
grep -r 'the'
Nic nie powinno być kolorowe. Zrób to samo w wirtualnej konsoli, wykonując CTRLALTF1 (pamiętaj, że Twój serwer X prawdopodobnie działa na CTRLALTF7, abyś mógł się z powrotem przełączyć. Jeśli zapomnisz, po prostu zrestartuj na przykład menedżera pulpitu)
grep -r 'the'
da pożądane kolorowe wyniki.
Nic nie powinno być kolorowe. Zrób to samo w wirtualnej konsoli, wykonując tę czynność CTRLALTF1(pamiętaj, że Twój serwer X prawdopodobnie działa CTRLALTF7, abyś mógł się z powrotem przełączyć. Jeśli zapomnisz, po prostu ponownie uruchom na przykład menedżera pulpitu)
grep -r 'the'
da pożądane kolorowe wyniki.
Powłoka logowania jest dostępna podczas uruchamiania komputera lub przełączania konsol wirtualnych za CTRLALTF1pomocą FNthkonsoli wirtualnej.
Powłoka logowania ładuje się /etc/profile
podczas ładowania /etc/profile.d/*.sh
plików.
/etc/bash.bashrc
z nieinteraktywnej powłoki./etc/profile
może być odczytany przez nieinteraktywną powłokę. Zobacz różnice między powłoką logowania a powłoką niezalogowaną?