bash
działa inaczej, niezależnie od tego, czy jest to powłoka, czy zwykły język programowania (jak perl
lub python
).
Zgodnie z projektem, ustawienia w ~/.bash_profile
, ~/.bashrc
itp są dla użytkowników, aby ustawić rzeczy, gdy bash
odgrywa rolę powłoki (shell logowania interractive shell). Pomyśl o środowisku, które masz w xterm
(powłoce interaktywnej) lub w ssh
sesjach (powłoka logowania) lub w konsolach (powłoka logowania).
Z drugiej strony bash
jest także potężnym językiem programowania - pomyśl o wielu skryptach do zarządzania usługami systemd
- który wymaga innego stylu pracy. Na przykład, gdy programista pisze skrypt systemowy lub bash
program, nie będzie chciał ~/.bash_profile
automatycznie pozyskiwać użytkownika . Jest to normalny program, a nie powłoka. Normalny program (w tym bash
programy) w naturalny sposób dziedziczy ustawienia z bieżącego środowiska roboczego (powłoki), ale ich nie ustawia .
Jeśli napiszemy program dla cron
in bash
- akurat się w nim zapisuje bash
; w rzeczywistości, możemy zapisać go w python
lub perl
lub inny progamming language- wtedy możemy mieć opcję źródeł bash
„s ~/.bash_profile
(czytaj: ustawienie muszli użytkownika, który okazuje się być tym samym języku, języku programowania):
[ -f /home/user/.bash_profile ] && . /home/user/.bash_profile
Co jednak, jeśli ten konkretny użytkownik nie używa bash
swojej powłoki? On / ona może używać zsh
, ksh
, fish
, itd. Tak, że praktyka nie naprawdę działa przy pisaniu programu do użytku publicznego.
Możesz więc zdobyć źródło, ~/.bash_profile
jeśli uważasz, że to zadziała. Ale tutaj nie chodzi o to, czy jesteśmy w stanie pobrać plik, chodzi o to, jak powinno działać w systemie: koncepcja projektowa . W skrócie: powinniśmy postrzegać bash
jako coś mającego 2 role: powłokę i język programowania . Wtedy wszystko będzie znacznie łatwiejsze do zrozumienia.
.bashrc
ma linię, która powstrzymuje ją przed uruchomieniem w nieinteraktywnych powłokach.