Jeśli wprowadzę zmiany .bashrc, jak mogę je ponownie załadować bez wylogowania i ponownego zalogowania?
Jeśli wprowadzę zmiany .bashrc, jak mogę je ponownie załadować bez wylogowania i ponownego zalogowania?
Odpowiedzi:
Musisz tylko wpisać polecenie:
source ~/.bashrc
lub możesz użyć krótszej wersji polecenia:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Sprawi to, że edycja będzie znacznie płynniejsza, ponieważ nie musisz myśleć o przeładowaniu, po wykonaniu edycji, jeśli używasz niestandardowego aliasu.
Lub możesz użyć:
exec bash
Robi to samo i jest łatwiejsze do zapamiętania (przynajmniej dla mnie).
execPolecenie całkowicie zastępuje proces powłoki poprzez uruchomienie określonego wiersza polecenia. W naszym przykładzie zastępuje on bieżącą powłokę nową instancją bash(zaktualizowanymi plikami konfiguracyjnymi).
source .bashrcpoleceń i exec bash?
sourceto wbudowane polecenie powłoki, które wykonuje zawartość pliku przekazanego jako argument w bieżącej powłoce . W twoim przykładzie wykonuje on plik .bashrc w bieżącej powłoce. A execpolecenie zastępuje powłokę danym programem, w twoim przykładzie zastępuje powłokę bash (ze zaktualizowanymi plikami konfiguracyjnymi)
. ~/.bashrctego uruchomię się , więc wystąpił błąd, ponieważ go brakuje. nie został znaleziony w powłoce, więc to rozwiązanie również jest dostępne. Próbowałem tego i obraz dokera został zbudowany płynnie! dashbashshoptsource
source ~/.bashrczachowa całe środowisko powłoki (choć prawdopodobnie zmodyfikowane przez źródło ~/.bashrc), podczas gdy exec bashzachowa tylko zmienne środowiskowe bieżącej powłoki (wszelkie zmiany ad-hoc w bieżącej powłoce pod względem zmiennych powłoki, funkcji, opcji zostaną utracone). W zależności od potrzeb preferowane może być jedno lub drugie podejście.
exec bash. execKomenda zastępuje powłokę z programem, w naszym przypadku bash. Tak więc zawsze istnieje jeden przypadek bash w terminalu.
Do uzupełnienia i kontrast dwóch najbardziej popularnych odpowiedzi, . ~/.bashrci exec bash:
Oba rozwiązania skutecznie ładują się ponownie ~/.bashrc, ale są różnice:
. ~/.bashrclub source ~/.bashrcbędzie zachować aktualny shell :
~/.bashrcw bieżącej powłoki ( sourcing ) sprawia, prąd powłoki i jej stan są zachowane , który zawiera zmienne środowiskowe, zmienne powłoki, opcje, funkcje powłoki skorupek i historię poleceń.exec bash, lub, bardziej solidnie, exec "$BASH"[1] , zastąpi bieżącą powłokę nową instancją, a zatem zachowa tylko zmienne środowiskowe bieżącej powłoki (w tym te, które zdefiniowałeś ad-hoc).
W zależności od potrzeb preferowane może być jedno lub drugie podejście.
[1] exec bashteoretycznie mógłby wykonać inny bash plik wykonywalny niż ten, który uruchomił bieżącą powłokę, jeśli zdarzy się, że istnieje w katalogu wymienionym wcześniej w $PATH. Ponieważ zmienna specjalna $BASHzawsze zawiera pełną ścieżkę do pliku wykonywalnego, który uruchomił bieżącą powłokę, exec "$BASH"gwarantuje się użycie tego samego pliku wykonywalnego.
Uwaga re "..."wokół $BASH: double-cytowanie zapewnia, że wartość zmiennej jest używany jak jest, bez interpretacji przez bash; jeśli wartość nie ma osadzonych spacji ani innych metaznaków powłoki (co nie jest prawdopodobne w tym przypadku), nie potrzebujesz ściśle podwójnych cudzysłowów, ale używanie ich jest dobrym nawykiem do tworzenia.
exec $BASHźródło ~/.bashrc, więc zobaczysz zmiany w środowisku powłoki w nowej sesji.
Ktoś edytował moją odpowiedź, aby dodać niepoprawny angielski, ale tutaj był oryginał, który jest gorszy od zaakceptowanej odpowiedzi.
. .bashrc
~/, ale ponieważ pierwsza odpowiedź pokazuje jedno source ~/.bashrci . ~/.bashrczastanawiam się, czy tę odpowiedź należy po prostu usunąć jako zbędną.
W zależności od środowiska wystarczy pisać
bash
może również działać.
. ~/.bashrc
source ~/.bashrc
exec bash
execpolecenie zastępuje powłokę danym programem ... - WhoSayIn
exec bashnadal dziedziczy środowisko bieżącej powłoki. exec env -i bashbyłoby bliżej (lub exec env -i bash -ljeśli jesteś obecnie w powłoce logowania).
W zależności od środowiska możesz dodać skrypty, aby automatycznie ładować plik .bashrc po otwarciu sesji SSH. Niedawno przeprowadziłem migrację na serwer z systemem Ubuntu i tam domyślnie ładowany jest plik .profile, a nie .bashrc lub .bash_profile. Aby uruchomić dowolne skrypty w .bashrc, musiałem uruchamiać się przy source ~/.bashrckażdym otwarciu sesji, co nie pomaga przy uruchamianiu zdalnym.
Aby twój .bashrc ładował się automatycznie podczas otwierania sesji, spróbuj dodać to do .profile:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Otwórz sesję ponownie i powinna załadować wszystkie ścieżki / skrypty, które masz w .bashrc.
Użyłem easyengine do skonfigurowania mojego serwera opartego na chmurze.
Znalazłem mój plik bash na /etc/bash.bashrc.
Tak source /etc/bash.bashrczrobiła dla mnie sztuczka!
aktualizacja
Konfigurując goły serwer (ubuntu 16.04), możesz użyć powyższych informacji, jeśli nie skonfigurowałeś jeszcze nazwy użytkownika i logujesz się przez root.
Najlepiej jest utworzyć użytkownika (z uprawnieniami sudo) i zalogować się jako ta nazwa użytkownika.
Spowoduje to utworzenie katalogu dla ustawień, w tym plików .profile i .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
Teraz będziesz edytować i (i „źródłowo”) ~/.bashrcplik.
Na moim serwerze znajdował się on pod /home/your_username/.bashrc
(gdzie your_usernametak naprawdę jest nowa nazwa użytkownika, którą utworzyłeś powyżej i teraz się logujesz)
exec bash to świetny sposób na ponowne uruchomienie i uruchomienie nowej powłoki w celu zastąpienia bieżącej. aby dodać do odpowiedzi, $ SHELL zwraca bieżącą powłokę, którą jest bash. Korzystając z poniższych, przeładuje bieżącą powłokę, a nie tylko bash.
exec $SHELL -l;
Dla mnie to, co działa, gdy zmieniam ŚCIEŻKĘ, to: exec "$BASH" --login
~/.bashrc, co --loginbędzie nie (bezpośrednio) przeładowania na poziomie użytkownika, przeładuje ~/.bash_profile(lub ~/.bash_loginlub ~/.profile) zamiast tego.
rodzaj:
source ~/.bashrc
lub w skrócie:
. ~/.bashrc
.bashrcsię znajduje. Bardziej poprawnym sposobem na to, jak powiedziano w zaakceptowanej odpowiedzi, jest source ~/.bashrc.
używam następującego polecenia na msysgit
. ~/.bashrc
krótsza wersja
source ~/.bashrc
Zakładając interaktywną powłokę, chcesz zachować swoją bieżącą historię poleceń, a także załadować / etc / profile (który ładuje dane środowiska, w tym / etc / bashrc, a na Mac OS X ładuje ścieżki zdefiniowane w /etc/paths.d/ przez path_helper), dołącz historię poleceń i wykonaj bash z opcją login ('-l'):
history -a && exec bash -l
Zauważyłem, że czyste exec bashpolecenie zachowa zmienne środowiskowe, więc musisz użyć, exec -c bashaby uruchomić bash w pustym środowisku.
Na przykład, logujesz się do bash, a export A=1jeśli ty exec bash, to A == 1.
Jeśli ty exec -cl bash, Ajest pusty.
Myślę, że to najlepszy sposób na wykonanie swojej pracy.
osobiście mam
alias ..='source ~/.bashrc'
w moim bashrc, dzięki czemu mogę po prostu użyć „..”, aby go ponownie załadować.
..jako aliasu cd .., więc będzie to bardzo mylące.
alias rehash='source ~/.bashrc'to mój wybór.
export PATH=$PATH:fooa następnie zmienisz go naexport PATH=$PATH:bar. Jeśli się zalogujesz i wylogujesz, tylkobarbędzie w ŚCIEŻCE, ale jeśli zrobisz to, co sugerujesz, zarównofooibarbędzie w ŚCIEŻCE. Czy znasz sposób na obejście tego?