02 May 2022
login shell是参数0以"-"开头,或者使用--login(-l)选项启动的shell。
non-login shell是除了login shell之外的shell。
- gnome pages
- bash manual docs 查看Invocation部分
根据login shell的介绍说明可知,我们可以查看login shell的参数0或根据启动选项中是否包含login来判断
# METHOD 1,根据参数0是否以"-"开头来判断 echo $0 -bash # METHOD 2,使用SHELLOPT来判断(这个一定准确,推荐) shopt login_shell login_shell on shopt -q login_shell && echo 'Login shell' || echo 'Not login shell' Login shell
方法1中,参数0不以”-“开头时,也不一定不是login shell,是因为还有部分是通过”–login”选项来启动的。所以推荐用方法2。
创建login shell
bash或sh加上--login(-l)参数启动shellsudo -i或su -创建non-login shell
bash或sh命令,无--login(-l)参数启动shellbash或sh命令加上--login(-l)参数,例如bash(or sh) -l -c "command"来创建login-shell。这里暂时不讨论图形界面
没有找到确切的原因,但是根据网上的讨论,一个相对靠谱的说法是,因为login shell和non-login shell加载的start up文件不同(详细的看man文档),有些登录时需要执行的任务,如果在每次执行其他子shell的时候都执行一遍,这样任务太重。所以才创建了这种non-login shell,避免每次创建子shell环境都会执行一遍那些任务。