Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在输入新的bash实例时.bashrc是否运行了两次?_Linux_Bash_Shell - Fatal编程技术网

Linux 在输入新的bash实例时.bashrc是否运行了两次?

Linux 在输入新的bash实例时.bashrc是否运行了两次?,linux,bash,shell,Linux,Bash,Shell,我想在bash提示符中显示嵌套子shell的数量 我经常在vim编辑会话期间键入“:sh”以执行某些操作,然后退出返回编辑器。有时我出于习惯而尝试退出编辑器,忘记了我不在任何编辑会话中,我的终端将关闭 为了避免这种情况,我在.bashrc中添加了一些代码,用于记录嵌套子shell的数量并在提示符中显示 代码如下: echo "1: SHLVL=$SHLVL" if [[ -z $SHPID ]] ; then echo "2: SHLVL=$SHLVL" SHPID=$$ let

我想在bash提示符中显示嵌套子shell的数量

我经常在vim编辑会话期间键入“:sh”以执行某些操作,然后退出返回编辑器。有时我出于习惯而尝试退出编辑器,忘记了我不在任何编辑会话中,我的终端将关闭

为了避免这种情况,我在.bashrc中添加了一些代码,用于记录嵌套子shell的数量并在提示符中显示

代码如下:

echo "1: SHLVL=$SHLVL"

if [[ -z $SHPID ]] ; then

 echo "2: SHLVL=$SHLVL"

 SHPID=$$

 let "SHLVL = ${SHLVL:0} + 1"
fi

echo "3: SHLVL=$SHLVL"
(对于那些可能想知道的人,测试“-z$SHPID”可以确保如果我在同一个shell中再次运行“.bashrc”,那么$SHLVL不会再次递增,也许是为了测试某些东西。)

但输出如下所示:

lsiden@morpheus ~ (morpheus) (2) $ bash
1: SHLVL=3
2: SHLVL=3
3: SHLVL=4
lsiden@morpheus ~ (morpheus) (4) $ ps
PID TTY          TIME CMD
10421 pts/2    00:00:00 bash
11363 pts/2    00:00:00 bash
11388 pts/2    00:00:00 ps
如您所见,堆栈上现在有两个bash实例,但是变量$SHLVL已经增加了两次。输出显示,在my.bashrc中执行这段代码之前,SHLVL已经增加了1


.bashrc是否可能以某种方式运行两次而不查看echo命令的输出?

SHLVL
在启动shell时自动递增:

~$ echo $SHLVL
1
~$ bash -c 'echo $SHLVL'
2

然后在
.bashrc

中再次递增它。是的,您这样做了,shell已经在执行您尝试执行的操作:)