Eine nicht interaktive Shell ohne Anmeldung versucht, ein in $ BASH_ENV angegebenes Skript zu erstellen. Aber wie kann ich garantieren, dass $ BASH_ENV festgelegt wird, bevor ein Cron-Job oder ein Skript die Möglichkeit hat, $ BASH_ENV für eine bestimmte Sitzung festzulegen? Ist die einzige Möglichkeit, Bash damit fest zu kompilieren?
bash
environment-variables
Igorio
quelle
quelle
pam_env
. Oder geben Sie einfach$HOME/.env
alle Ihre Skripte ein.Antworten:
Wenn Sie möchten, dass alle Bash-Skripte in Ihrer Crontab geladen werden
BASH_ENV
, legen Sie sie auf der Crontab-Ebene fest.Wenn Sie
BASH_ENV
nur für einen bestimmten Eintrag festlegen möchten , legen Sie ihn dort fest. DannBASH_ENV
wird nicht für den Code festgelegt, der in der Crontab selbst aufgeführt ist, aber es ist eine schlechte Idee, dort trotzdem etwas Komplexes zu platzieren.Wenn Sie möchten, dass ein bestimmtes Skript immer eine Konfigurationsdatei lädt, laden Sie diese direkt aus dem Skript heraus.
quelle
export
Sie sich,$BASH_ENV
wenn Sie es nur für einen einzelnen Prozess einstellen? NurBASH_ENV=/path/to/startup.bash /path/to/bash_script
ist der vernünftige Weg, es zu tun.BASH_ENV
wird nur in einer nicht interaktiven Shell gelesen und nur, wenn diese Shell bash ist (und auch nicht unter dem Namen aufgerufensh
wird). Eine interaktive Shell ohne Login sucht nicht nach$BASH_ENV
:Es gibt keine Standarddatei, die in einer nicht interaktiven Shell für Benutzer ausgeführt wird. Sie sollten es in einer separaten Datei festlegen und dann als Quelle verwenden:
Oder Sie können es in einer systemweiten Konfigurationsdatei wie
/etc/environment
oder einstellen/etc/bashrc.bashrc
.quelle