![在 nnn 子 shell 中保留环境变量(自定义 shell 提示)](https://linux22.com/image/221570/%E5%9C%A8%20nnn%20%E5%AD%90%20shell%20%E4%B8%AD%E4%BF%9D%E7%95%99%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%EF%BC%88%E8%87%AA%E5%AE%9A%E4%B9%89%20shell%20%E6%8F%90%E7%A4%BA%EF%BC%89.png)
我运行两个不同的终端模拟器,并有不同的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“记住”其父终端模拟器?