Linux中的login shell和non-login shell

Linux中的shell分两种,一种是login shell,一种是non-login shell。
login shell,顾名思义,提供登录功能的shell,应该都能理解。
non-login shell,无须登录的shell,一般出现在图形界面或者bash命令。

理解起来没有什么问题的话,我们来看一下这两个shell所接触到的变量。
login shell不会有什么问题,直接从startup文件里面(比如/etc/profile,~/.profile文件)解析出来。
但是non-login shell的话,按理说是从父shell继承过来,但是实际上,non-login shell还会解析某些特定的startup文件(比如/etc/bash.bashrc, ~/.bashrc文件)来的变量。

我们来举个例子,我们修改/etc/bash.bashrc文件,添加一个变量:
testvar="1"
然后我们输入bash,进入第一个non-login shell,先输出一下变量:
echo $testvar //输出为1

1、不尝试修改变量,输入bash,进入第二个non-login shell,输出变量:
echo $testvar //输出为2

2、我们可以尝试修改这个变量:
testvar="2"
尝试输出一下:
echo $testvar //输出为2
此时,我们输入bash,进入第二个non-login shell,输出变量:
echo $testvar //输出为1

这是因为本来继承了父shell的testvar变量为2,但是重新读取了一下bash.bashrc文件,把testvar变量重置为1。

标签: none

添加新评论