为什么 Awesome 中的新终端生成时 SLVL > 1?

l0b*_*0b0 5 bash awesome

我有一个PS1显示 SLVL(如果它不是 1)的工具,可以快速查看我是否处于子 shell 中。Mod4使用 GNOME 时,这可以按预期工作,但是当我在 Awesome WM ( + Return)中生成新终端时,它总是以SHLVL=2或更高版本开头。这是正常的吗?

这与我重新启动 Awesome 的次数(Mod4++Ctrlr)直接相关pkill -HUP awesome。有什么方法可以避免重新启动时产生新的外壳吗?

这些 提交似乎是相关的,因为 Awesome 最终运行了类似$SHELL -c ...on的东西HUP,但我不知道足够的 C 来修复它。

我的/bin/shdash,我的登录 shell 是bash

报告了该问题

Gil*_*il' 5

我想我明白原因,但我没有完整的解决方案。

\n\n

的行为SHLVL取决于 shell。在 dash 和 ksh(pdksh 和 ksh93)中,只有交互式实例才会递增SHLVL。在 bash 和 zsh 中,所有实例都会递增SHLVL,甚至递增bash -c \xe2\x80\xa6

\n\n

如果您在此补丁之后观察到行为发生变化,则您的很可能/bin/sh是 dash,而您的$SHELL是 bash。之前,awesome 正在执行,/bin/sh -c \xe2\x80\xa6但没有改变SHLVL。补丁之后,它现在正在执行$SHELL -c \xe2\x80\xa6,即bash -c \xe2\x80\xa6递增SHLVL

\n\n

你可以通过改变SHLVLAwesome 内部来作弊。挂钩启动代码以减少SHLVL1。我很确定这是可能的,无需重新编译 C 代码,尽管我不知道 Lua 代码。

\n