Как гарантировать доступность $ BASH_ENV


8

Неинтерактивная оболочка, не входящая в систему, будет пытаться получить любой сценарий, указанный в $ BASH_ENV. Но как я могу гарантировать, что $ BASH_ENV будет установлен до того, как задание cron или сценарий получат возможность установить $ BASH_ENV для какого-либо конкретного сеанса? Это единственный вариант для компиляции Bash с жестко закодированным?


Проверьте pam_env. Или просто источник $HOME/.envво всех ваших сценариях.
Микель

Ответы:


7

Если вы хотите, чтобы все скрипты bash в вашем crontab загружались BASH_ENV, установите его на уровне crontab.

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

Если вы хотите установить BASH_ENVтолько для определенной записи, установите его там. Тогда BASH_ENVон не будет установлен для кода, указанного в самом crontab, но в любом случае плохая идея ставить там что-то сложное.

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

Если вы хотите, чтобы определенный скрипт всегда загружал какой-либо файл конфигурации, загрузите его непосредственно из скрипта.

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

Почему вы беспокоить exportING , $BASH_ENVесли вы только установить его для одного процесса? Просто BASH_ENV=/path/to/startup.bash /path/to/bash_scriptразумный способ сделать это.
mikeserv

4

BASH_ENVтолько для чтения в неинтерактивной оболочке, и только если эта оболочка bash (и не вызывается под именем sh, либо). Интерактивная оболочка без логина не ищет $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

Не существует стандартного файла, который запускается в неинтерактивной оболочке для пользователя. Вы должны установить его в отдельный файл, а затем получить его:

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

Или вы можете установить его в каком - то системах широкого конфигурационного файла , как /etc/environmentили /etc/bashrc.bashrc.


Я надеялся, что / etc / environment сработает, но, насколько я могу судить, он не поддерживается никакими оболочками в Mac OS 10.6. /etc/bashrc.bashrc звучит интригующе, но мне сложно отследить какую-либо информацию о нем. Или это опечатка?
Игорьо
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.