Come garantire la disponibilità di $ BASH_ENV


8

Una shell non interattiva e non di accesso tenterà di generare qualsiasi script specificato in $ BASH_ENV. Ma come posso garantire che $ BASH_ENV sia impostato prima che un lavoro cron o uno script abbiano la possibilità di impostare $ BASH_ENV per una sessione particolare? L'unica opzione per compilare Bash è hardcoded?


Partenza pam_env. O semplicemente fonte $HOME/.envin tutti i tuoi script.
Mikel,

Risposte:


7

Se vuoi caricare tutti gli script bash nel tuo crontab BASH_ENV, impostalo a livello di crontab.

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

Se si desidera impostare BASH_ENVsolo per una voce particolare, impostarla lì. Quindi BASH_ENVnon verrà impostato per il codice elencato nel crontab stesso, ma è una cattiva idea mettere comunque qualcosa di complesso lì.

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

Se si desidera che un determinato script carichi sempre un file di configurazione, caricarlo direttamente dall'interno dello script.

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


Perché vi preoccupate exporting $BASH_ENVse siete solo l'impostazione per un singolo processo? Solo BASH_ENV=/path/to/startup.bash /path/to/bash_scriptè il modo sensato per farlo.
Mikeserv,

4

BASH_ENVviene letto solo in una shell non interattiva e solo se quella shell è bash (e non chiamata neanche sotto il nome sh). Una shell interattiva senza accesso non cerca $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

Non esiste un file standard che viene eseguito nella shell non interattiva per l'utente. Dovresti impostarlo in un file separato, quindi sorgente:

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

Oppure puoi impostarlo in alcuni file di configurazione del sistema come /etc/environmento /etc/bashrc.bashrc.


Speravo che / etc / environment avrebbe funzionato, ma per quanto ne so, non proviene da nessuna shell in Mac OS 10.6. /etc/bashrc.bashrc sembra intrigante, ma ho difficoltà a rintracciare qualsiasi informazione su di esso. O è un errore di battitura?
Igorio,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.