Proste zapytanie: Właśnie zdałem sobie sprawę, że nigdy nie widziałem shebang na szczycie .bashrc
skryptu, co prowadzi mnie do wniosku, że system używa domyślnej powłoki do pozyskiwania jej podczas logowania ( ${SHELL}
). Zastanawiam się, dlaczego tak jest, tj. Czy uważa się za zły nawyk używanie czegoś innego niż domyślna powłoka do uruchamiania skryptu logowania.
22
Odpowiedzi:
.bashrc
i NIE.bash_profile
są skryptami. Są to pliki konfiguracyjne, które są pobierane za każdym razem, gdy są wykonywane na jeden z dwóch sposobów:bash
Sekcja WYWOŁANIE strony podręcznika bash jest nowością.
Możesz kontrolować, kiedy zostaną załadowane za pomocą przełączników wiersza poleceń,
--norc
oraz--noprofile
. Możesz również zastąpić lokalizację, z której zostaną załadowane za pomocą--rcfile
przełącznika.Jak wspomnieli inni, możesz naśladować sposób ładowania tych plików za pomocą
source <file>
polecenia lub. <file>
polecenia.Najlepiej pomyśleć o tej funkcjonalności w następujący sposób:
Metody wywoływania
Wydaje się, że ten temat pojawia się co jakiś czas, więc oto krótki ściągawka różnych sposobów wywoływania
bash
i tego, co one skutkują. UWAGA: Aby pomóc, dodałem komunikaty „sourced $ HOME / .bashrc” i „sourced $ HOME / .bash_profile ”do odpowiednich plików.podstawowe połączenia
bash -i
bash -l
bash -il -or- bash -li
bash -c "..cmd .."
UWAGA: Zauważ, że
-c
przełącznik nie źródło żadnego pliku!wyłączenie odczytu plików konfiguracyjnych
bash --norc
bash - noprofile
bash --norc -i
bash --norc -l
bash --noprofile -i
bash --noprofile -l
bash --norc -i -or- bash --norc -l
Więcej ezoterycznych sposobów na wywołanie bash
bash --rcfile $ HOME / .bashrc
bash --norc --rcfile $ HOME / .bashrc
Te zawiodły
bash -i -rcfile ~ / .bashrc
bash -i -rcfile .bashrc
Prawdopodobnie jest ich więcej, ale masz rację, mam nadzieję ...
Co jeszcze?
Na koniec, jeśli jesteś tak zafascynowany tym tematem, że chcesz przeczytać / zbadać więcej na ten temat, gorąco polecam przejrzenie Przewodnika dla początkujących Bash, w szczególności sekcji: 1.2. Zalety Bourne Again SHell . Różne podrozdziały w tym podrozdziale, „1.2.2.1. Wywołanie ” do „1.2.2.3.3. Interaktywne zachowanie powłoki” wyjaśniają niewielkie różnice poziomów między różnymi sposobami wywoływania
bash
.źródło
.bash_profile
zawiera linię do źródła.bashrc
. Ale uważam, że jest to bardzo typowe dla konfiguracji..bashrc
i.bash_profile
nie są skryptami . IMHO to skrypty specjalnego przeznaczenia, które są domyślnie pozyskiwane podczas inicjacji bash lub jawnie, gdy trzeba zastosować ich modyfikacje. Nie tylko konfigurują środowisko bash (zmienne, funkcje, aliasy ...) zgodnie z oczekiwaniami z plików konfiguracyjnych. Mogą wykonywać dowolne czynności, jak w typowych skryptach. Na przykład mogą rozpocząć różne działania, takie jak zadania w tle, zapisywać zapisy w dzienniku, inicjować niektóre programy itp. W każdym razie dziękuję za szczegółowe podsumowanie!.bashrc
skrypty są uruchamiane tylkobash
same. Nie są wolnostojące i nie mają być wykorzystywaneexec
przez system. (W rzeczywistości na ogół nie są one oznaczone jako pliki wykonywalne i, jak mówisz, nie mają linii shebang).Takie skrypty mają być oznaczeniami
source
d, ponieważ zwykle zmieniają zmienne środowiskowe ($PATH
na przykład), które powinny pozostać po zakończeniu skryptu. Tak więc naprawdę nie ma sensu próbować wykonać jednego w podpowłoce.źródło
Oprócz innych odpowiedzi, pamiętaj, że jeśli chcesz, nic nie zabrania umieszczania shebang na początku tych plików konfiguracyjnych.
To nie zaszkodzi pozyskiwaniu ich przez skorupkę, ponieważ shebang będzie przetwarzany jak zwykły komentarz, tj. Ignorowany.
Może to pomóc redaktorom korzystającym z podświetlania składni dowiedzieć się, jakiego języka programowania używa się w pliku.
Zauważ jednak, że niektórzy redaktorzy
vim
oferują alternatywne sposoby, takie jak modeliny dla tych ostatnich. tzn. zawsze możesz umieścić linie trybu na końcu~/.bashrc
i~/.bash_profile
tak:źródło
.bash_profile
na zalecenie ShellCheck.Czytam to wszędzie, nie wiem gdzie dokładnie, ale to prawda
źródło