두 개의 서로 다른 터미널 에뮬레이터를 실행 중이고 zsh
둘 중 하나에 있는지 여부에 따라 다른 프롬프트가 표시됩니다(두 번째는 "기본값"입니다).
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
쉘이 "기본" 프롬프트로 전환됩니다. 하위 쉘 프롬프트를 기본 프롬프트 설정과 동기화하고 싶습니다.
내 첫 번째 생각은 먼저 하위 쉘 깊이가 0인지 확인하는 것이었습니다. 이렇게 하면 나중에 하위 쉘에서 참조할 변수로 쉘 프롬프트가 설정될 것입니다.
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
쉘이 상위 터미널 에뮬레이터를 "기억"하도록 강제하는 방법은 무엇입니까 ?