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

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

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

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

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

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

报告了该问题

答案1

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

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

如果您在之后观察到行为发生变化这个补丁,很可能你的/bin/sh是 dash ,你的$SHELL是 bash 。之前,awesome 正在执行/bin/sh -c …,没有改变SHLVL。补丁之后,它现在正在执行$SHELL -c …bash -c …即递增SHLVL

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

相关内容