我运行两个不同的终端模拟器,并有不同的zsh
提示,具体取决于我是在其中一个还是另一个(第二个是“默认”):
TERM_EMU=$(ps --pid $(ps --pid $$ -o ppid=) -o comm=)
if [ $TERM_EMU = 'term1' ]; then
PS1='term1> '
else
PS1='term2> '
fi
(我从哪里获取了终端模拟器名称查找命令这个问题)
不过,我也用于nnn
文件导航并经常生成其子 shell。每当我进入nnn
子 shell 时,使用该命令找到的终端仿真器的进程 IDps
就会变为nnn
,并且 shell 会切换到“默认”提示符。我想将子 shell 提示与我的主提示设置同步。
我的第一个想法是首先检查我是否处于零子壳深度;这可能会将我的 shell 提示符设置为一个稍后由子 shell 引用的变量:
if [ -z $NNNLVL ]; then
TERM_EMU=$(ps --pid $(ps --pid $$ -o ppid=) -o comm=)
if [ $TERM_EMU = 'term1' ]; then
PS1='term1> '
else
PS1='term2> '
fi
else
PS1="($NNNLVL) $PS1"
fi
这是行不通的;相反,子 shell 提示符变为
(<level>) <hostname>%
这根本不是我想要的;显然该PS1
变量没有转移到子 shell 中。如何强制nnn
shell“记住”其父终端模拟器?