Jeśli wprowadzę zmiany .bashrc
, jak mogę je ponownie załadować bez wylogowania i ponownego zalogowania?
1641
Musisz tylko wpisać polecenie:
source ~/.bashrc
lub możesz użyć krótszej wersji polecenia:
. ~/.bashrc
export PATH=$PATH:foo
a następnie zmienisz go naexport PATH=$PATH:bar
. Jeśli się zalogujesz i wylogujesz, tylkobar
będzie w ŚCIEŻCE, ale jeśli zrobisz to, co sugerujesz, zarównofoo
ibar
będzie w ŚCIEŻCE. Czy znasz sposób na obejście tego?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ć:
Robi to samo i jest łatwiejsze do zapamiętania (przynajmniej dla mnie).
exec
Polecenie 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).źródło
source .bashrc
poleceń iexec bash
?source
to 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. Aexec
polecenie zastępuje powłokę danym programem, w twoim przykładzie zastępuje powłokę bash (ze zaktualizowanymi plikami konfiguracyjnymi). ~/.bashrc
tego 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!dash
bash
shopt
source
source ~/.bashrc
zachowa całe środowisko powłoki (choć prawdopodobnie zmodyfikowane przez źródło~/.bashrc
), podczas gdyexec bash
zachowa 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
.exec
Komenda 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,
. ~/.bashrc
iexec bash
:Oba rozwiązania skutecznie ładują się ponownie
~/.bashrc
, ale są różnice:. ~/.bashrc
lubsource ~/.bashrc
będzie zachować aktualny shell :~/.bashrc
w 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 bash
teoretycznie mógłby wykonać innybash
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$BASH
zawsze 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.źródło
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.
źródło
~/
, ale ponieważ pierwsza odpowiedź pokazuje jednosource ~/.bashrc
i. ~/.bashrc
zastanawiam się, czy tę odpowiedź należy po prostu usunąć jako zbędną.W zależności od środowiska wystarczy pisać
może również działać.
źródło
Dzięki temu nie będziesz musiał nawet wpisywać „source ~ / .bashrc”:
Dołącz swój plik bashrc:
Za każdym razem, gdy chcesz edytować swój bashrc, po prostu uruchom alias „ rc ”
źródło
Alternatywy
źródło
exec bash
nadal dziedziczy środowisko bieżącej powłoki.exec env -i bash
byłoby bliżej (lubexec env -i bash -l
jeś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 ~/.bashrc
każ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:
Otwórz sesję ponownie i powinna załadować wszystkie ścieżki / skrypty, które masz w .bashrc.
źródło
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.bashrc
zrobił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”)
~/.bashrc
plik.Na moim serwerze znajdował się on pod
/home/your_username/.bashrc
(gdzie
your_username
tak naprawdę jest nowa nazwa użytkownika, którą utworzyłeś powyżej i teraz się logujesz)źródło
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;
źródło
Dla mnie to, co działa, gdy zmieniam ŚCIEŻKĘ, to:
exec "$BASH" --login
źródło
~/.bashrc
, co--login
będzie nie (bezpośrednio) przeładowania na poziomie użytkownika, przeładuje~/.bash_profile
(lub~/.bash_login
lub~/.profile
) zamiast tego.rodzaj:
source ~/.bashrc
lub w skrócie:
. ~/.bashrc
źródło
.bashrc
się znajduje. Bardziej poprawnym sposobem na to, jak powiedziano w zaakceptowanej odpowiedzi, jestsource ~/.bashrc
.używam następującego polecenia na msysgit
krótsza wersja
źródło
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'):
źródło
To również zadziała.
źródło
~
zmiany katalogu roboczego na katalog osobisty użytkownika?Zauważyłem, że czyste
exec bash
polecenie zachowa zmienne środowiskowe, więc musisz użyć,exec -c bash
aby uruchomić bash w pustym środowisku.Na przykład, logujesz się do bash, a
export A=1
jeśli tyexec bash
, toA == 1
.Jeśli ty
exec -cl bash
,A
jest pusty.Myślę, że to najlepszy sposób na wykonanie swojej pracy.
źródło
osobiście mam
alias ..='source ~/.bashrc'
w moim bashrc, dzięki czemu mogę po prostu użyć „..”, aby go ponownie załadować.
źródło
..
jako aliasucd ..
, więc będzie to bardzo mylące.alias rehash='source ~/.bashrc'
to mój wybór.