昨天看了TualatriX的盗梦终端:如何进入第1000层梦境,于是好奇也想试一下,我的办法很简单,就是直接在.bashrc里面加上下面一段代码,然后打开一个新的终端,.bashrc里面的代码会自动执行:
1 2 3 4 5 6 | if [[ $SHLVL -lt 1000 ]];then echo $SHLVL; bash; else echo $SHLVL; fi |
代码乍一看没什么问题,也正常运行,大约30分钟后我返回电脑前,发现才到400多层,却占了将近4G的内存,ps了一下发现其实开了4400多个bash……
研究了一下才发现,原来到第1000层的时候,$SHLVL的值变成了0,导致上面的代码变成了死循环(这算是Bash里面的Limbo么?)。把上面的代码中的1000改成999就好了。
当在第1000层的时候,再手工执行bash命令,进入下一层bash,这时候显示的$SHLVL的值是1。原来这个1,也不过是系统给人的假象罢了,执行两次exit,$SHLVL又变成了999。
这让我想起《盗梦空间》里面的结局,Cobb最终回到了美国,见到了两个孩子,他转起陀螺来分辨是否是梦境,虽然结局没有演陀螺是否停止,但就算陀螺停下来,也未必说明世界是真实的,说不定系统只是简单的返回了个1而已,实际是在第N*1000 + 1层梦境。
Post your comment