
使用Jenkins执行shell脚本的时候, 碰到command not found. 比如java mvn, 这些环境变量配置在/etc/profile
中, 但jenkins执行的时候并没有加载.
这是因为jenkins执行的shell是非登录交互式shell, 并不会加载/etc/profile.
交互式shell会加载.bashrc, 进而会加载/etc/bashrc, 而/etc/bashrc会加载/etc/profile.d/*.sh.
*因此, 自定义的变量应该定义在/etc/profile.d/.sh
1.登录shell
所谓登录shell,指的是当用户登录系统时所取的那个shell,登录shell属于交互式shell。
登录shell将查找4个不同的启动文件来处理其中的命令。 bash shell处理文件的顺序如下:
1:/etc/profile
2:/etc/profile.d等待配置文件
3:$HOME/.bash_profile 会加载$HOME/.bashrc和/etc/bashrc
4:$HOME/.bash_login
5:$HOME/.profile
2. 交互式非登录shell
如果启动了一个bash shell而没有登入系统(如在CLI提示符中键入bash),
则启动了一个交互式非登录shell.
$HOME/.bashrc
交互式非登录shell执行~/.bashrc文件中的命令.在每次执行shell脚本时,都会重新读取这个文件,所以是最完整的。
但是万事都不是一样的,deba

在Jenkins执行shell脚本时遇到command not found问题,原因是非登录交互式shell不加载/etc/profile。交互式登录shell会读取多个启动文件,而非登录shell主要执行~/.bashrc。为确保环境变量生效,应将它们定义在/etc/profile.d/下的.sh文件。了解登录与非登录shell的区别,以及各自加载的配置文件,有助于正确设置环境变量。


被折叠的 条评论
为什么被折叠?



