bash与环境变量
项目名称
文件名称
bash与环境变量
编制部门
后台运维
作者
丁正凯
当前版本
201807170922
受众范围
后台运维
文档控制
修改记录
日期
版本
修改类型
修改主要内容
作者
◆修改类型:A增加、B删除、C修改
审阅人
姓名
部门
职位
审阅签字
审阅时间
存档
存档时间
存放方式
存放地点、位置
备注
◆存放方式:A电子、B纸质
目录
1 参考 1
2 CentOS 5
2.1 interactive login shell 5
2.2 non-interactive login shell 5
2.3 interactive non-login shell 6
2.4 non-interactive non-login shell 6
3 Debian 7
3.1 interactive login shell 7
3.2 non-interactive login shell 7
3.3 interactive non-login shell 8
3.4 non-interactive non-login shell 8
4 测试与总结 8
4.1 配置方式 8
4.2 生效情况 8
4.2.1 CentOS 8
4.2.2 Debian 9
4.3 总结 9
http://ahei.info/chinese-bash-man.htm
http://www.gnu.org/software/bash/manual/bashref.html
http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
http://linux.vbird.org/linux_basic/0320bash.php#settings_bashrc
https://unix.stackexchange.com/questions/170493/login-non-login-and-interactive-non-interactive-shells
https://unix.stackexchange.com/questions/259617/are-there-non-interactive-login-shells
https://unix.stackexchange.com/questions/38175/difference-between-login-shell-and-non-login-shell
https://blog.csdn.net/wang_xijue/article/details/46820043
设置自动执行的任务遇到环境变量问题(如cron执行脚本找不到命令或脚本执行脚本找不到命令)没有执行成功时,检查环境变量配置的流程:
场景:输入用户名密码后取得的终端
场景:输入用户名密码后取得的终端,执行类似bash xxx-script.sh或bash -c 'xx'。
图示同上interactive login shell。
场景:
场景:执行命令前没有任何通过登录获取终端或bash会话,如cron、开机启动的服务。注意和前3种类型的non-login区分。
使用BASH_ENV,不使用PATH寻找可执行文件。
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
debian系统级的shell是dash(不是bash)。
中间调用 /etc/bash.bashrc 和 /etc/profile.d/*.sh
中间调用 /etc/bash.bashrc 和 /etc/profile.d/*.sh
图示同上interactive login shell。
使用BASH_ENV,不使用PATH寻找可执行文件。
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
在/etc/profile.d/custom.sh配置export环境变量,配置alias别名。
alias
是否生效
interactive login shell
Ok
non-interactive login shell
ERR
interactive non-login shell
Ok
non-interactive non-login shell
ERR
export
是否生效
interactive login shell
Ok
non-interactive login shell
Ok
interactive non-login shell
Ok
non-interactive non-login shell
ERR
alias
是否生效
interactive login shell
OK
non-interactive login shell
ERR
interactive non-login shell
ERR
non-interactive non-login shell
ERR
export
是否生效
interactive login shell
OK
non-interactive login shell
OK
interactive non-login shell
OK
non-interactive non-login shell
ERR
export的环境变量,非交互-非登录shell不生效,如cron、开机启动的服务如tomcat。因此使用cron定时执行的脚本中需要先source该文件或脚本中先配置好环境变量、类似tomcat的有setenv.sh。
alias的别名,Debian非交互shell不生效,非登录shell不生效。CentOS非交互shell不生效。
针对Debian的alias可以考虑在用户的 .bashrc 或 /etc/bash.bashrc 其中之一添加代码如下
for i in /etc/profile.d/*.sh; do
if \[ \-r "$i" \]; then
if \[ "$PS1" \]; then
\. "$i"
else
\. "$i" >/dev/null
fi
fi
done
效果如下图,注意红色线条
login shell
non-login shell