1.交互式登陆shell或带--login
选项的非交互式shell
当Bash作为交互式登录shell,或者作为带 --login
选项的非交互式shell调用时,会依次读取并执行以下配置文件的命令:/etc/profile
, ~/.bash_profile
,~/.bash_login
,~/.profile
。
如果使用--noprofile
选项,则不读取这些配置文件。
当交互式登录shell退出,或者带--login
选项的非交互式登录shell执行exit
内置命令时,Bash会读取并执行 ~/.bash_logout
配置文件中的命令。
2.交互式非登陆shell
当Bash作为交互式非登陆shell调用时,Bash会读取并执行 ~/.bashrc
配置文件中的命令。
如果使用--norc
选项,则不读取 ~/.bashrc
配置文件。
如果使用 --rcfile file
选项将强制Bash从 file
中读取和执行命令,而不是从 ~/.bashrc
中。
3.非交互式非登陆shell
当Bash作为非交互式非登陆shell调用时,例如,为了运行shell脚本,它会在环境中寻找 BASH_ENV
变量,并使用 BASH_ENV
变量的值作为文件名,读取并执行此文件。
4.使用sh
调用
当使用sh
作为交互式登录shell,或者作为带 --login
选项的非交互式shell调用时,会依次读取并执行/etc/profile
和~/.profile
配置文件中的命令。如果使用--noprofile
选项,则不读取这些配置文件。
当使用sh
作为交互式shell调用时,Bash会查找变量ENV
,并使用 ENV
变量的值作为文件名,读取并执行此文件。由于作为sh
调用的shell不会尝试从任何其他启动文件中读取和执行命令,因此 --rcfile
选项不起作用。
当使用sh
作为非交互式非登陆shell调用时,不会尝试读取任何其他启动文件。
当使用sh
调用时,Bash在读取启动文件后进入POSIX模式。
5.测试是否交互式shell
//方式一
case "$-" in
*i*) echo This shell is interactive ;;
*) echo This shell is not interactive ;;
esac
//方式二
if [ -z "$PS1" ]; then
echo This shell is not interactive
else
echo This shell is interactive
fi
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/osexp/22819.html