如何保证$ BASH_ENV的可用性


8

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


结帐pam_env。或者只是$HOME/.env在所有脚本中提供源代码。
Mikel 2014年

Answers:


7

如果要加载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

你为什么要打扰export荷兰国际集团$BASH_ENV,如果你只是将它设置为一个单一的过程?只要BASH_ENV=/path/to/startup.bash /path/to/bash_script是明智的办法做到这一点。
mikeserv 2014年

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中的任何shell所提供的。/etc/bashrc.bashrc听起来很有趣,但是我很难追踪到它的任何信息。还是错字?
Igorio 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.