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).
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).
source .bashrc
poleceń i exec 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. A exec
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 gdy exec 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
i exec bash
:
Oba rozwiązania skutecznie ładują się ponownie ~/.bashrc
, ale są różnice:
. ~/.bashrc
lub source ~/.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ć 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 $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.
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 ~/.bashrc
i . ~/.bashrc
zastanawiam 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
exec
polecenie zastępuje powłokę danym programem ... - WhoSayIn
exec bash
nadal dziedziczy środowisko bieżącej powłoki. exec env -i bash
byłoby bliżej (lub exec 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:
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.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)
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 --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
.bashrc
się 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 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 ty exec bash
, to A == 1
.
Jeśli ty exec -cl bash
, A
jest 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: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?