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
シェルが親端末エミュレータを「記憶」するように強制する方法は?