So garantieren Sie die Verfügbarkeit von $ BASH_ENV

8

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?

Igorio
quelle
Auschecken pam_env. Oder geben Sie einfach $HOME/.envalle Ihre Skripte ein.
Mikel

Antworten:

7

Wenn Sie möchten, dass alle Bash-Skripte in Ihrer Crontab geladen werden BASH_ENV, legen Sie sie 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

Wenn Sie BASH_ENVnur für einen bestimmten Eintrag festlegen möchten , legen Sie ihn dort fest. Dann BASH_ENVwird 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.

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 Konfigurationsdatei lädt, laden Sie diese direkt aus dem Skript heraus.

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

Gilles 'SO - hör auf böse zu sein'
quelle
Warum stören exportSie sich, $BASH_ENVwenn Sie es nur für einen einzelnen Prozess einstellen? Nur BASH_ENV=/path/to/startup.bash /path/to/bash_scriptist der vernünftige Weg, es zu tun.
Mikesserv
4

BASH_ENVwird nur in einer nicht interaktiven Shell gelesen und nur, wenn diese Shell bash ist (und auch nicht unter dem Namen aufgerufen shwird). 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 Benutzer ausgeführt wird. Sie sollten es in einer separaten Datei festlegen und dann als Quelle verwenden:

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

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

cuonglm
quelle
Ich hatte die Hoffnung, dass / etc / environment funktionieren würde, aber soweit ich das beurteilen kann, wird es in Mac OS 10.6 nicht von Shells bezogen. /etc/bashrc.bashrc klingt faszinierend, aber ich habe Schwierigkeiten, Informationen darüber zu finden. Oder ist das ein Tippfehler?
Igorio