我应该如何避免在 shells-within-shell-sessions 中重复评估大量 bashrc 命令?

我应该如何避免在 shells-within-shell-sessions 中重复评估大量 bashrc 命令?

.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

相关内容