bashverhält sich anders, egal ob es sich um eine Shell oder eine normale Programmiersprache handelt (wie perloder python).
Durch Design, die Einstellungen in ~/.bash_profile, ~/.bashrcusw. sind für die Benutzer - Set Dinge , wenn bashspielt die Rolle einer Schale (Login - Shell, interractive Shell). Denken Sie an die Umgebung, die Sie in einer xterm(interaktiven Shell) oder in sshSitzungen (Anmeldeshell) oder in Konsolen (Anmeldeshell) haben.
Andererseits bashist es auch eine leistungsstarke Programmiersprache, die über viele Skripte zum Verwalten von Diensten nachdenkt und systemdeinen anderen Arbeitsstil erfordert. Wenn ein Entwickler beispielsweise ein Systemskript oder ein bashProgramm schreibt , möchte er den Benutzer nicht ~/.bash_profileautomatisch als Quelle verwenden . Es ist ein normales Programm, keine Shell. Ein normales Programm (einschließlich bashProgramme) würde natürlich Einstellungen von der aktuellen Arbeitsumgebung (Shell) erben , diese jedoch nicht festlegen .
Wenn wir ein Programm für cronin schreiben, wird bashes zufällig in geschrieben bash. in der Tat können wir es in schreiben pythonoder perloder andere Progammierung sprach dann können wir eine Option Quellen haben bash‚s ~/.bash_profile(sprich: die Benutzer-Shell - Einstellung, die nur zufällig die gleiche Sprache Ihrer Programmiersprache sein):
[ -f /home/user/.bash_profile ] && . /home/user/.bash_profile
Was ist jedoch, wenn dieser bestimmte Benutzer nicht bashals Shell verwendet? Er / sie verwenden kann zsh, ksh, fishusw. Also, diese Praxis funktionieren würde, nicht wirklich , wenn Programm für die öffentliche Nutzung zu schreiben.
Sie können also Quellen ~/.bash_profileangeben, wenn Sie glauben, dass dies funktionieren wird. Aber hier geht es nicht darum, ob wir eine Datei beschaffen können, sondern darum, wie die Dinge im System funktionieren sollen: das Designkonzept . Kurz gesagt: Wir sollten bashetwas mit zwei Rollen sehen: Shell und Programmiersprache . Dann wird alles viel einfacher zu verstehen sein.
.bashrchat eine Linie , die sie stoppt die Ausführung von in nicht-interaktiven Shells.