在 nnn 子 shell 中保留环境变量(自定义 shell 提示)

在 nnn 子 shell 中保留环境变量(自定义 shell 提示)

我运行两个不同的终端模拟器,并有不同的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 中。如何强制nnnshell“记住”其父终端模拟器?

相关内容