Kar*_*ter 6 scripting bash environment-variables
在 sh 脚本中,另一个 sh 脚本以su -l <user> -c /path/to/script.sh. 据我了解script.sh将在非交互式 shell 中运行。官方文档试图解释如何在这种非交互式 shell 中设置变量,即在BASH_ENV[ http://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html ] 中传递它们。对于初学者来说,这显然是一个不充分的解释,并且没有(真实的)示例(在 $SEARCH_ENGINE 中也没有找到)。
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
Run Code Online (Sandbox Code Playgroud)
可能意味着很多 [1]。有人可以举一个传递给非交互式 shell 的环境变量的例子。
只是为了确保:登录和非登录以及交互式和非交互式之间的区别对我来说很清楚(https://superuser.com/questions/636219/where-should-i-export-an-environment- variable-so-that-all-combinations-of-bash-d或引用链接(如果有人感兴趣)。
[1]我试过了
BASH_ENV="\\$PATH=$PATH\\n\\$JAVA_HOME=$JAVA_HOME" su -l artifactory -c echo $JAVA_HOMEBASH_ENV="\$PATH=$PATH\n\$JAVA_HOME=$JAVA_HOME" su -l artifactory -c echo $JAVA_HOMEsu -l artifactory -c echo $JAVA_HOME如果它是一个sh脚本 - 如在,它显式引用#!/bin/sh- 这可能仍然是,bash但就像调用它一样--posix --no-rc --no-profile- 那么你可以使用环境变量指定ENV文件ENV:
ENV=/path/to/rcfile sh
Run Code Online (Sandbox Code Playgroud)
特定变量需要在命令行上声明 - 如上所述$ENV- 或者使用export. 例如,为$PATH您做:
export "PATH=$PATH:/some/more/paths"; sh
Run Code Online (Sandbox Code Playgroud)
$BASH_ENV您引用的变量不是您需要获取的文件 - 它在bash被调用时无论如何都不会被解释为sh- 而是在调用非交互式bashshell时获取的文件的路径- 例如使用脚本指定:
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
...或任何爆炸线。
您可能希望调用脚本/shell 的另一种方法是使用该env实用程序。它可用于从环境中明确删除值,或者通常最简单的方法是从一开始就将其清除:
env - BASH_ENV=/path/to/rcfile /usr/bin/bash /some/script/file
Run Code Online (Sandbox Code Playgroud)
这将告诉env调用/usr/bin/bash命令 - 附加所有参数 - 并$BASH_ENV指定环境变量,否则完全使用干净的环境。
| 归档时间: |
|
| 查看次数: |
17188 次 |
| 最近记录: |