So garantieren Sie die Verfügbarkeit von $BASH_ENV

So garantieren Sie die Verfügbarkeit von $BASH_ENV

Eine nicht interaktive Shell ohne Anmeldung versucht, jedes in $BASH_ENV angegebene Skript als Quelle zu verwenden. Aber wie garantiere ich, dass $BASH_ENV festgelegt ist, bevor ein Cron-Job oder Skript die Möglichkeit hat, $BASH_ENV für eine bestimmte Sitzung festzulegen? Ist die einzige Möglichkeit, Bash mit fest codiertem $BASH_ENV zu kompilieren?

Antwort1

Wenn Sie möchten, dass alle Bash-Skripte in Ihrer Crontab geladen werden BASH_ENV, legen Sie dies auf der Crontab-Ebene fest.

BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

BASH_ENVWenn Sie nur einen bestimmten Eintrag festlegen möchten , legen Sie ihn dort fest. Dann BASH_ENVwird er nicht für den in der Crontab selbst aufgeführten Code festgelegt, aber es ist sowieso keine gute Idee, dort etwas Komplexes einzugeben.

12 34 * * * export BASH_ENV=/path/to/startup.bash; /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

Wenn Sie möchten, dass ein bestimmtes Skript immer eine bestimmte Konfigurationsdatei lädt, laden Sie diese direkt aus dem Skript heraus.

#!/bin/bash
. /path/to/configuration.bash

Antwort2

BASH_ENVwird nur gelesen in einemnicht interaktivShell, und nur, wenn diese Shell Bash ist (und shauch nicht unter dem Namen aufgerufen wird). Eine interaktive Shell ohne Login sucht nicht nach $BASH_ENV:

$ export BASH_ENV=/home/cuonglm/bash-env.sh
$ bash -lci '. test.sh'
QWERTY
$ bash -lc '. test.sh'
BASH_ENV read
QWERTY
$ bash -ci '. test.sh'
QWERTY
$ bash -c '. test.sh'
BASH_ENV read
QWERTY

Es gibt keine Standarddatei, die in einer nicht interaktiven Shell für den Benutzer ausgeführt wird. Sie sollten sie in einer separaten Datei ablegen und dann als Quelle verwenden:

bash -c '. ~/.profile; echo 123'

Oder Sie können es in einer systemweiten Konfigurationsdatei wie /etc/environmentoder festlegen /etc/bashrc.bashrc.

verwandte Informationen