Igo*_*rio 7 bash environment-variables
非交互式、非登录 shell 将尝试获取 $BASH_ENV 中指定的任何脚本。但是如何保证在 cron 作业或脚本有机会为任何特定会话设置 $BASH_ENV 之前设置 $BASH_ENV ?使用硬编码来编译 Bash 是唯一的选择吗?
如果您希望 crontab 中的所有 bash 脚本都加载BASH_ENV,请将其设置在 crontab 级别。
BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script
Run Code Online (Sandbox Code Playgroud)
如果您只想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
Run Code Online (Sandbox Code Playgroud)
如果您希望特定脚本始终加载某些配置文件,请直接从脚本中加载它。
#!/bin/bash
. /path/to/configuration.bash
…
Run Code Online (Sandbox Code Playgroud)
BASH_ENV仅在非交互式shell中读取,并且仅当该 shell 是 bash 时才读取(并且也不以名称 调用sh)。非登录交互式 shell 不会查找$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
Run Code Online (Sandbox Code Playgroud)
没有为用户在非交互式 shell 中运行的标准文件。您应该将其设置在单独的文件中,然后获取它:
bash -c '. ~/.profile; echo 123'
Run Code Online (Sandbox Code Playgroud)
或者您可以在某些系统范围的配置文件中设置它,例如/etc/environment或/etc/bashrc.bashrc。