Jak ponownie załadować .bash_profile z wiersza poleceń?

994

Jak mogę przeładować .bash_profilez linii poleceń ?

Mogę sprawić, aby powłoka rozpoznała zmiany .bash_profile, wychodząc i logując się ponownie, ale chciałbym móc to zrobić na żądanie.

markdorison
źródło

Odpowiedzi:

1880

Po prostu wpisz source ~/.bash_profile

Alternatywnie, jeśli lubisz zapisywać naciśnięcia klawiszy, możesz wpisać . ~/.bash_profile

SiegeX
źródło
49
Jak o alias BASHRELOAD=". ~/.bash_profile". Jeśli robisz to często, możesz po prostu aliasować jako br.
bobobobo
1
jakiś powód, dla którego muszę to robić za każdym razem / sesję? Nie mogę wprowadzić zmian do .bash_profile, aby zachować, nawet jeśli są one w pliku, gdy otwieram go w edytorze. Zagmatwane.
erwinheiser
3
@erwinheiser czy twój system ładuje plik? Niektóre systemy używają innych plików, takich jak ~ / .bashrc.
Graham P Heath
1
Jeśli chcesz wiedzieć, czy coś poszło nie tak przy ładowaniu, możesz użyć:alias reload='source ~/.bash_profile && echo "File .bash_profile reloaded correctly" || echo "Syntax error, could not import the file"';
Cristian Batista
1
Dla osób, które zapomniały o przejściu na OhMyZsh. uruchom open ~ / .zshrc i wprowadź tam zmiany zamiast swojego .bash_profile
Sankofa
105
. ~/.bash_profile

Tylko upewnij się, że nie masz żadnych zależności od obecnego stanu.

Carl Norum
źródło
15
Dlaczego to działa? Tj. Jakie jest .polecenie w tym przypadku?
Jonah
9
operator kropki:. jest po prostu aliasem sourcepolecenia.
Graham P Heath
8
@GrahamPHeath - ściśle mówiąc, myślę, że jest na odwrót; .jest starszy niż sourceJEST.
Carl Norum
4
sourcejest specyficzną dla basha implementacją.
Thirupathi Thangavel
7
@StasS - .i sourcedosłownie to samo w bash. Z linku: „ sourcejest synonimem kropki / kropki .” w bash, ale nie w POSIX sh, więc dla maksymalnej kompatybilności użyj kropki . ”
Carl Norum,
31

Po prostu wpisz:

. ~/.bash_profile

Jeśli jednak chcesz, aby źródło było uruchamiane automatycznie po uruchomieniu terminalu zamiast uruchamiania go za każdym razem, gdy otwierasz terminal, możesz dodać go . ~/.bash_profiledo ~/.bashrcpliku.

Uwaga:

Gdy otworzysz terminal, terminal rozpocznie bash w trybie interaktywnym (bez logowania), co oznacza, że ​​będzie źródłem ~/.bashrc.

~/.bash_profilejest pozyskiwany wyłącznie przez bash, gdy jest uruchamiany w trybie interaktywnego logowania . Zwykle dzieje się tak tylko wtedy, gdy logujesz się na konsoli ( Ctrl+ Alt+ F1.. F6) lub łączysz się ssh.

Mohammad Anini
źródło
15

Możesz także użyć tego polecenia, aby ponownie załadować ~ / .bash_profile dla tego użytkownika. Pamiętaj, aby użyć myślnika.

su - username
jaypal singh
źródło
6
Spowoduje to wywołanie całej powłoki w powłoce, dalekie od ideału. Inne opcje po prostu ponownie uruchamiają odpowiedni plik, co oznacza, że ​​(A) faktycznie odpowiadają zadanemu pytaniu i (B) nie gromadzą powłok i prawdopodobnie przeładowują inne rzeczy, które nie powinny (env vars itp.). Tam odpowiednie sposoby, aby zastąpić bieżącą powłokę wprost (bez zagnieżdżania), ale ponieważ jest to off-topic, Zostawię zainteresowanych czytelników, aby szukać gdzie indziej.
underscore_d
3
otwierasz kolejną powłokę, to nie jest przeładowanie, równie dobrze możesz otworzyć nowy terminal lub ponownie się zalogować
Juan Diego
15

Podoba mi się fakt, że po właśnie edycji pliku wystarczy, że napiszesz:

. !$

To źródło pliku, który właśnie edytowałeś w historii. Zobacz Co to jest dolar hukowy w bash .

hyper_st8
źródło
11
  1. Zapisz plik .bash_profile
  2. Przejdź do katalogu domowego użytkownika, wpisując cd
  3. Załaduj ponownie profil za pomocą . .bash_profile
Mithun Khatri
źródło
8
Po prostu idź do domu z cd. Nie ma potrzeby ~.
roNn23
8
Nie musisz cd- możesz po prostu ponownie załadować go z katalogu, w którym aktualnie się znajdujesz:. ~/.bash_profile
Alex Villa
10

Jeśli nie masz nic przeciwko utracie historii obecnego terminala powłoki, możesz to zrobić

bash -l

To rozwidliłoby twoją powłokę i otworzyłoby kolejny potomny proces bash. Ten -lparametr mówi bashowi, aby działał jako powłoka logowania, jest to wymagane, ponieważ plik .bash_profile nie będzie działał jako powłoka niezalogowana. Aby uzyskać więcej informacji o tym przeczytaj tutaj

Jeśli chcesz całkowicie zastąpić bieżącą powłokę, możesz również:

exec bash -l

Powyższe nie rozwidli twojej obecnej powłoki, ale całkowicie ją zastąpi, więc podczas pisania exit całkowicie się zakończy, zamiast upuszczać cię do poprzedniej powłoki.

Ulukai
źródło
nie stracisz historii, jeśli używasz iterm2
Xitcod13
4

Dodaj alias bashs="source ~/.bash_profile"do swojego pliku bash. Możesz więc zadzwonić bashsod razu

Shemeer M Ali
źródło
1
I alias, że reset- łatwiej zapamiętać
jcollum
3

jeśli plik .bash_profile nie istnieje, możesz spróbować uruchomić następującą komendę:

. ~/.bashrc 

lub

 source ~/.bashrc

zamiast .bash_profile. Możesz znaleźć więcej informacji o bashrc

Ezequiel De Simone
źródło
3

Chciałem opublikować szybką odpowiedź, która podczas korzystania source ~/.bash_profilelub odpowiedzi wspomniane powyżej działają, należy wspomnieć, że ładuje to tylko Twój profil bash w bieżącej karcie lub sesji, którą przeglądasz. Jeśli chcesz ponownie załadować swój profil bash na każdej karcie / powłoce, musisz wprowadzić to polecenie ręcznie w każdym z nich.

Jeśli korzystasz z iTerm, możesz użyć CMD⌘+ Shift+, Iaby wprowadzić polecenie do wszystkich bieżących kart . W przypadku terminala przydatne może być odniesienie do tego problemu ;

sierpień
źródło
2

Używam Debiana i mogę po prostu pisać, exec bashaby to osiągnąć. Nie mogę powiedzieć, czy będzie działać na wszystkich innych dystrybucjach.

Cassandra
źródło
2
To nie będzie działać na Macu (przynajmniej nie w wersji, której używam - Sierra), ponieważ po prostu robi to powłokę bez logowania, która nie uruchamia .bash_profile
Ulukai
@Ulukai najwyraźniej po prostu pisze, . .bash_profilegdy jesteś w katalogu domowym na komputerze Mac. To samo co odpowiedź udzielona powyżej przez 7urkm3n.
Cassandra
2
alias reload!=". ~/.bash_profile"

lub jeśli chcesz dodać dzienniki za pomocą funkcji

function reload! () {
    echo "Reloading bash profile...!"
    source ~/.bash_profile
    echo "Reloaded!!!"
}
7urkm3n
źródło
Nie, zależy od ciebie. Jeśli chcesz dodać dodatkowe linie drukujące pokazujące status, albo po prostu . ~/. bash_profile nie source ~/.bash_profile
idź
1

Korzystam z Sierra i pracuję nad tym przez jakiś czas (próbuję wszystkich zalecanych rozwiązań). Byłem zdezorientowany, więc w końcu próbowałem ponownie uruchomić komputer! Zadziałało

doszedłem do wniosku, że czasami konieczny jest twardy reset

Fan Bjorks numer jeden
źródło
1
Mike tak, twardy reset zadziała, ponieważ wtedy wszystko jest ładowane świeżo. Tak długo, jak zmiany, które wprowadzisz, będą działały, będą obowiązywać przy następnym uruchomieniu. Łatwiej byłoby ci jednak trochę rozejrzeć się, aby znaleźć polecenie / metodę, aby odświeżyć bash bez konieczności robienia tego cały czas. Będzie sposób na osiągnięcie tego bez restartu, co oczywiście pochłonie zbyt wiele czasu, aby zobaczyć, czy ostatnia zmiana działa! Być może rzuć
Cassandra
1
tak, spróbowałem zarówno skróconego, jak i pełnego polecenia, aby ponownie załadować profil / ścieżkę bash. nie działało, tylko wylogowanie i ponowne zalogowanie działało. dziwne
fan Bjorks numer jeden