Dlaczego muszę pobierać .bashrc za każdym razem, gdy otwieram terminal, aby działały aliasy? [duplikować]

25

Dodałem tę linię do mojego ~/.bashrcpliku.

alias myserver='ssh [email protected]'

Jednak kiedy otwieram terminal i uruchamiam myserver, terminal narzeka

-bash: myserver: command not found

Jednak gdy źródłem mój plik .bashrc ( . .bashrc), alias działa.

Niemniej jednak nie chcę pobierać pliku za każdym razem, gdy otwieram terminal dla działania aliasu. Jak to zrobić?

David Faux
źródło
3
Ten komentarz wyjaśnia przyczynę tego. To pytanie mówi, jak to naprawić.
ughoavgfhw
Wielkie dzięki! Nie wiedziałem, że uruchomienie powłoki wykonuje te pliki w kolejności. Rzeczywiście, dodawanie . .bashrcdo .bash_profiledzieł.
David Faux,
@ughoavgfhw czy możesz / powinieneś zmienić swój komentarz na odpowiedź? W ten sposób można go oznaczyć jako odpowiedź.
soxman

Odpowiedzi:

25

Krótko mówiąc, umieszczasz swoje aliasy w niewłaściwym pliku .bashrc, dlatego musisz nadal uruchamiać źródło, aby aliasy działały w każdej nowej instancji terminala logowania.

Z komentarza Chrisa Johnsena na Dlaczego .bashrc nie działa automatycznie?

Domyślnie Terminal uruchamia powłokę przez / usr / bin / login, co czyni powłokę powłoką logowania. Na każdej platformie (nie tylko Mac OS X) bash nie używa .bashrc do powłok logowania (tylko / etc / profile i pierwszy z .bash_profile, .bash_login, .profile, który istnieje i jest dostępny do odczytu). Dlatego „umieść źródło ~ / .bashrc w pliku .bash_profile” to standardowa rada.

Aby uzyskać więcej informacji, zobacz stronę podręcznika dla bash:

man bash

Następnie zajrzyj do sekcji ZAPROSZENIE.

MrDaniel
źródło
Czy muszę ponownie uruchomić komputer, aby wszystko działało? Ponieważ dodałem source ~/.bashrcdo mojego .bash_profile, ale wciąż mam ten sam problem ...
Michiel
1
Nie, w większości przypadków wystarczy otworzyć nowe okno terminala, aby zmiany zostały wprowadzone, zmiany zostaną wprowadzone tylko w nowo otwartym oknie.
MrDaniel
11

Zawsze możesz położyć

if [ -n "$BASH_VERSION" ] && [ -f $HOME/.bashrc ];then
    source $HOME/.bashrc
fi

do pliku ~/.profilelub ~/.bash_profilena Maca myślę.

Oooor, możesz po prostu włożyć swoje rzeczy do .profilelub .bash_profile.

Dylan
źródło
Jest to odnotowane w drugiej odpowiedzi - dlaczego nie jesteś pewien tych rzeczy?
user151019,
Przeczytaj to bardzo podobne pytanie: apple.stackexchange.com/q/12993/22003 i dodaj tam wszelkie ulepszenia.
dan
@danielAzuelos Wait; chcesz, żebym skomentował na drugiej stronie lub zaktualizował moją odpowiedź na podstawie drugiego pytania?
Dylan
@ Mark Myślałem tylko w bardzo hipotetycznym sensie - na przykład co, jeśli czyjś terminalny proces nie wiedział o źródle pliku .profile? Ich terminal prawdopodobnie nie wystartowałby w pierwszej kolejności, ale nadal jest to możliwe ... tak jakby ktoś włamał się do swojego / usr / bin / login czy coś takiego.
Dylan
→ Dylan: przeczytaj to bardzo podobne pytanie: apple.stackexchange.com/q/12993/22003, a znajdziesz odpowiedź na swoje „być może?”.
dan