bashdziała inaczej, niezależnie od tego, czy jest to powłoka, czy zwykły język programowania (jak perllub python).
Zgodnie z projektem, ustawienia w ~/.bash_profile, ~/.bashrcitp są dla użytkowników, aby ustawić rzeczy, gdy bashodgrywa rolę powłoki (shell logowania interractive shell). Pomyśl o środowisku, które masz w xterm(powłoce interaktywnej) lub w sshsesjach (powłoka logowania) lub w konsolach (powłoka logowania).
Z drugiej strony bashjest 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 bashprogram, nie będzie chciał ~/.bash_profileautomatycznie pozyskiwać użytkownika . Jest to normalny program, a nie powłoka. Normalny program (w tym bashprogramy) w naturalny sposób dziedziczy ustawienia z bieżącego środowiska roboczego (powłoki), ale ich nie ustawia .
Jeśli napiszemy program dla cronin bash- akurat się w nim zapisuje bash; w rzeczywistości, możemy zapisać go w pythonlub perllub 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 bashswojej 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_profilejeś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ć bashjako coś mającego 2 role: powłokę i język programowania . Wtedy wszystko będzie znacznie łatwiejsze do zrozumienia.
.bashrcma linię, która powstrzymuje ją przed uruchomieniem w nieinteraktywnych powłokach.