Como garantir a disponibilidade de $ BASH_ENV

8

Um shell não interativo, com login diferente, tentará originar qualquer script especificado em $ BASH_ENV. Mas como eu garanto que o $ BASH_ENV está definido antes de um trabalho cron ou script ter a chance de definir $ BASH_ENV para qualquer sessão em particular? A única opção para compilar o Bash com ele é codificada?

    
por Igorio 22.06.2014 / 21:38

2 respostas

7

Se você quiser que todos os scripts bash em seu crontab carreguem BASH_ENV , configure-o no nível do crontab.

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

Se você deseja definir BASH_ENV apenas para uma entrada específica, defina-a aqui. Então BASH_ENV não será definido para o código listado no próprio crontab, mas é uma má idéia colocar qualquer coisa lá de qualquer maneira.

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

Se você quiser que um script em particular carregue sempre algum arquivo de configuração, carregue-o diretamente de dentro do script.

#!/bin/bash
. /path/to/configuration.bash
…
    
por 23.06.2014 / 02:38
4

BASH_ENV é lido apenas em um shell não interativo , e somente se esse shell for bash (e não for chamado sob o nome sh , também). Um shell interativo de não logon não procura $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

Não há arquivo padrão executado em shell não interativo para o usuário. Você deve configurá-lo em arquivo separado e depois fonte:

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

Ou você pode configurá-lo em algum arquivo de configuração do sistema, como /etc/environment ou /etc/bashrc.bashrc .

    
por 22.06.2014 / 22:28