如何保证$BASH_ENV的可用性

如何保证$BASH_ENV的可用性

非交互式、非登录 shell 将尝试获取 $BASH_ENV 中指定的任何脚本。但是,如何保证在 cron 作业或脚本有机会为任何特定会话设置 $BASH_ENV 之前设置 $BASH_ENV 呢?硬编码是编译 Bash 的唯一选择吗?

答案1

如果您希望加载 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

如果您只想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

答案2

BASH_ENV仅在a中读取非交互式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

没有为用户在非交互式 shell 中运行的标准文件。您应该将其设置在单独的文件中,然后获取它:

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

或者您可以在某些系统范围的配置文件中设置它,例如/etc/environment/etc/bashrc.bashrc

相关内容