.bashrc nie jest wykonywany podczas otwierania nowego terminala

84

Kod w .bashrc nie jest wykonywany, gdy otwieram nowe okno terminala w Ubuntu 12.04. Zauważyłem to podczas tworzenia pliku .bash_aliases. Aliasy nie pojawiły się, kiedy otworzyłem nowy terminal. Jednak po source .bashrcwpisaniu aliasy się pojawiły.

.bashrc powinien być uruchamiany za każdym razem, gdy otwieram nowe okno terminala, prawda?

Jak to zrobić?

Selah
źródło
Zamiast tego spróbuj .profile.
jippie
4
@jippie Nie, .profilejest odczytywany podczas logowania, a nie po otwarciu nowego terminala, chyba że gdzieś jest błędna konfiguracja. Selah: czy zmieniłeś coś z domyślnej konfiguracji? Uruchom ps -o command $$ $PPIDw terminalu i skopiuj i wklej dane wyjściowe.
Gilles
1
Żeby się upewnić, że umieszczasz .bashrcswój folder domowy, prawda?
Jjed
Może chcę to sprawdzić echo $SHELL. To mi się przydarzyło i powłoką był / bin / sh zamiast bash. Napraw to w / etc / passwd i działającym .bashrc.
Joe Flynn

Odpowiedzi:

128

To niekoniecznie musi działać; na górze standardowego pliku .bashrc znajduje się ten komentarz:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Wierzę, że istnieje opcja uruchomienia terminala bash jako powłoki logowania lub nie. W Ubuntu gnome-terminal zwykle nie działa jako powłoka logowania, więc .bashrc powinien być uruchamiany bezpośrednio.

W przypadku powłok logowania (takich jak wirtualne terminale) zwykle plik ~/.profilejest uruchamiany, chyba że masz albo, ~/.bash_profilealbo ~/.bash_login, ale domyślnie ich nie ma. Domyślnie Ubuntu używa tylko .profile.

Standard ~/.profilema to w sobie:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Uruchamia .bashrc, jeśli jest dostępny - zakładając, że $ BASH_VERSION jest obecne w twoim środowisku. Możesz to sprawdzić, wprowadzając polecenie echo $BASH_VERSION, które powinno wyświetlać informacje o numerze wersji - nie powinno być puste.

Marty Fried
źródło
4
Po zrozumieniu tych instrukcji przeszedłem do mojej aplikacji terminalowej. Poszedłem do edycji -> preferencje profilu -> Tytuł i polecenie -> Uruchom polecenie jako powłokę logowania. Odznaczam to. Dzięki za pomoc.
Selah,
Czy możesz wyjaśnić, kiedy .profile (stąd .bashrc) jest ładowany / czytany? Wygląda na to, że dzieje się tak, gdy użytkownicy logują się do sesji pulpitu. Odpowiedź sugeruje to nastąpi po uruchomieniu nowego terminalu / shell sesji „Dla powłok zgłoszeniowych (jak wirtualnych terminali), zwykle plik ~ / .profile prowadzony jest ...”
jeż
4
To jest normalnie działać po uruchomieniu nowej powłoki (sesja logowania nie naprawdę stacjonarnego, ponieważ można uruchomić nową powłokę logowania z sesji pulpitu). Jak powiedziałem, jest uruchamiany domyślnie, ale nie jeśli utworzyłeś ~/.bash_profilelub ~/.bash_login. Możesz przetestować, zaznaczając lub odznaczając pole wyboru Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell, a następnie wyjdź, a następnie uruchom ponownie terminal. Możesz przetestować coś z pliku .profile.
Marty Fried
@Selah Twój komentarz pomógł mi bardziej niż faktyczną odpowiedź;) wielkie dzięki za komentarz!
Aleks
Więc jeśli utworzyłeś ~/.bash_profilelub ~/.bash_loginw swoim systemie i chcesz je zachować, ale nadal chcesz, ~/.profilea stamtąd ~/.bashrcwykonane, możesz je pobrać z własnego ~/.bash_profilelub ~/.bash_loginz linii zawierającej source "$HOME/.profile". Zwraca kolorowe wyjście ls również w powłokach logowania!
tanius
26

W moim przypadku po prostu .bashrcbrakowało linii ładujących.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Dodałem go ręcznie i działało z moim nowym loginem

użytkownik3584014
źródło
3
.bash_profile? Ubuntu używa .profiledomyślnie, a nie .bash_profile.
muru
Serwer Ubuntu często nie odbiera .bashrc ... powyżej działa, więc działa ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Załaduj domyślne
Scott Stensland
To rozwiązało dla mnie! Dodałem pcrei wygląda na to, że zastąpił profil bash zamiast go dodać.
shapiro yaacov
7

.bash_profileprzechowuje konfigurację powłoki bash. Kiedy otworzysz terminal, najpierw czyta i wykonuje polecenia z ~/.bash_profile. Możesz więc dodać następujące elementy, .bash_profileaby ustawić powłokę zgodnie z bashrc.

. ~/.bashrc
SD.
źródło
O ile twój terminal nie uruchamia powłoki logowania (której domyślnie nie ma w Ubuntu), ~/.bash_profilenie zostanie odczytany (i domyślnie nie istnieje w Ubuntu)
muru
5

Jeśli $BASH_VERSIONnie jest ustawiony, spróbuj użyć chshpolecenia, aby ustawić powłokę na /bin/bash.

Miałem podobny problem z 12.04 LTS i okazało się, że nowe konto użytkownika miało domyślną powłokę ustawioną na /bin/sh, co było przyczyną problemu.

evan_b
źródło
To był powód!
Mulya
1

Przypisywanie do komentarza w .profile

~ / .profile: wykonywany przez interpreter poleceń dla powłok logowania. 11 Ten plik nie jest odczytywany przez bash (1), jeśli ~ / .bash_profile lub ~ / .bash_login¬ 10 # istnieje

Więc proszę, jeśli ~/.bash_profilelub ~/.bash_login exists, te zostaną uruchomione zamiast~/.profile

jeśli chcesz uruchomić ~/.bashrctylko dodać linię source ~/.bashrcwbash_profile

Nic Wanavit
źródło
1
Wystąpił dokładnie ten sam problem. Mój .bashrcbył pozyskiwany, dopóki nie utworzyłem .bash_profilepliku. Więc wstawiłem source ~/.bashrc wiersz do mojego .bash_profilepliku.
Lashae
0

Zamiast przejść przez to wszystko, po prostu przejdź Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"do niestandardowego pola poleceń bashi zapisz je. Następnym razem, gdy otworzysz terminal, uruchomi on również bash automatycznie.

Furqan Ali
źródło
Do którego GUI się odnosisz? gnom lub jedność
Nic Wanavit