bash
verhält sich anders, egal ob es sich um eine Shell oder eine normale Programmiersprache handelt (wie perl
oder python
).
Durch Design, die Einstellungen in ~/.bash_profile
, ~/.bashrc
usw. sind für die Benutzer - Set Dinge , wenn bash
spielt die Rolle einer Schale (Login - Shell, interractive Shell). Denken Sie an die Umgebung, die Sie in einer xterm
(interaktiven Shell) oder in ssh
Sitzungen (Anmeldeshell) oder in Konsolen (Anmeldeshell) haben.
Andererseits bash
ist es auch eine leistungsstarke Programmiersprache, die über viele Skripte zum Verwalten von Diensten nachdenkt und systemd
einen anderen Arbeitsstil erfordert. Wenn ein Entwickler beispielsweise ein Systemskript oder ein bash
Programm schreibt , möchte er den Benutzer nicht ~/.bash_profile
automatisch als Quelle verwenden . Es ist ein normales Programm, keine Shell. Ein normales Programm (einschließlich bash
Programme) würde natürlich Einstellungen von der aktuellen Arbeitsumgebung (Shell) erben , diese jedoch nicht festlegen .
Wenn wir ein Programm für cron
in schreiben, wird bash
es zufällig in geschrieben bash
. in der Tat können wir es in schreiben python
oder perl
oder 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 bash
als Shell verwendet? Er / sie verwenden kann zsh
, ksh
, fish
usw. Also, diese Praxis funktionieren würde, nicht wirklich , wenn Programm für die öffentliche Nutzung zu schreiben.
Sie können also Quellen ~/.bash_profile
angeben, 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 bash
etwas mit zwei Rollen sehen: Shell und Programmiersprache . Dann wird alles viel einfacher zu verstehen sein.
.bashrc
hat eine Linie , die sie stoppt die Ausführung von in nicht-interaktiven Shells.