nnnサブシェル(カスタムシェルプロンプト)で環境変数を保持する

nnnサブシェル(カスタムシェルプロンプト)で環境変数を保持する

2つの異なるターミナルエミュレータを実行していて、どちらかzsh一方にあるかどうかによって異なるプロンプトが表示されます(2番目は「デフォルト」です)。

TERM_EMU=$(ps --pid $(ps --pid $$ -o ppid=) -o comm=)
if [ $TERM_EMU = 'term1' ]; then
    PS1='term1> '
else
    PS1='term2> '
fi

(ターミナルエミュレータ名ルックアップコマンドはどこで入手できますか?この問題)

ただし、ファイルの参照にも使用し、nnnサブシェルを頻繁に作成します。サブシェルに入るたびに、nnnこのコマンドを使用して見つかったターミナルエミュレータのプロセスIDがps変更され、nnnシェルが「デフォルト」プロンプトに切り替わります。サブシェルプロンプトをデフォルトのプロンプト設定と同期させたい。

私の最初の考えは、最初にサブシェルの深さがゼロであることを確認することでした。これにより、後でサブシェルが参照する変数にシェルプロンプトが設定されます。

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

これは機能しません。代わりにサブシェルプロンプトが表示されます。

(<level>) <hostname>% 

これは私が望むものではありません。明らかに、PS1変数はサブシェルに転送されません。nnnシェルが親端末エミュレータを「記憶」するように強制する方法は?

ベストアンサー1

おすすめ記事