我想在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已经增加了两次。输出显示在此代码片段甚至在我的.bashrc中执行之前,SHLVL已经增加了1!
.bashrc是否有可能以某种方式运行两次而不会看到echo命令的输出?
答案 0 :(得分:2)
SHLVL
会自动递增:
~$ echo $SHLVL
1
~$ bash -c 'echo $SHLVL'
2
然后你在.bashrc
再次递增它。