.bash_profile
在 bash 中,我们对和进行了固有的分离.bashrc
,前者为登录 shell 运行,另一个为所有 shell 运行。现在我理解从非 shell 进程启动交互式非登录 shell 是很常见的,因此我发现自己在.bashrc
.问题是,人们还经常从交互式 shell 会话或 shell 脚本中调用 shell;我完全不确定它们都没有运行.bashrc
。所以,我想我想以某种方式限制我所做的一些事情在.bashrc
某种意义上只发生在“顶级”交互式 shell 中。
是否有一些关于如何完成此操作的约定?或者,与好处相比,这是否太麻烦了?
答案1
如果新的 bash 进程是从已经存在的进程中生成的,无论它是否是交互式的,您想要做的似乎是避免 .bashrc 再次被(完全)获取。
你可以这样做:
Hello, I am a "first" shell
$ cat .bashrc
[ -n "$SPAWNING" ] && return
export SPAWNING=yes
echo 'Hello, I am a "first" shell'
$ bash
$
exit
$ env -i bash
Hello, I am a "first" shell
$ exit
$
正如我所展示的,仍然需要注意的是,当新的 bash 在所有环境变量都被清除的情况下生成时,它不会有帮助。
答案2
“$-”变量包含当前 shell 在调用时的选项;您可能会发现存在“i”,这表示交互式 shell。
case "$-" in
*i*) echo in interactive shell
# do interactive-only setup here
;;
esac