SSH 내의 SSH는 xterm 제목 표시줄에 잘못된 시스템 이름을 표시합니다.

SSH 내의 SSH는 xterm 제목 표시줄에 잘못된 시스템 이름을 표시합니다.

여러 서버에 동시에 연결하는 분산 시스템을 개발 중입니다. 작업 중인 프로그램에는 수동으로 시작되는 항목이 없지만 오류를 수동으로 재현하는 방법은 다음과 같습니다.

xterm을 시작한 다음 다음과 같이 머신에 SSH를 연결합니다.

ssh machine_1

다음과 같이 첫 번째 xterm 내부에서 또 다른 xterm을 시작합니다.

xterm &

그런 다음 새 xterm 창에는 "사용자 이름(machine_1)"과 유사한 제목 표시줄이 있습니다.

이 xterm에서는 다음과 같이 다른 시스템에 SSH로 연결합니다.

ssh machine_2

하지만 제목 표시줄은 여전히 ​​다음과 같습니다: "사용자 이름(machine_1)"

machine_2에 로그인했는데도 마찬가지입니다. "사용자 이름(machine_2)"을 표시하고 싶습니다. 괄호를 완전히 제거해도 작동합니다.

xtermset을 시도했지만 대괄호에는 영향을 미치지 않습니다.

답변1

xterm 또는 machine_1의 쉘은 컴퓨터 이름을 포함하도록 터미널 제목을 설정하도록 구성됩니다. machine_2에서 셸을 구성하고 컴퓨터 이름을 포함하도록 터미널 제목을 설정합니다. 또한 SSH 세션이 종료되면 machine_1의 셸이 헤더를 재설정하는지 확인해야 합니다. 일반적인 접근 방식은 프롬프트가 표시될 때 쉘이 터미널 제목을 재설정하도록 하는 것입니다. 전체 화면 텍스트 모드 응용 프로그램이 런타임에 터미널 제목을 설정하는 경우 터미널 제목을 합리적인 것으로 재설정하는 추가 이점이 있습니다.

다음을 표시하여 xterm의 제목을 설정할 수 있습니다.이스케이프 시퀀스 \e]2;my title here\a여기서 \e는 이스케이프 문자( \033)이고 \a는 벨 문자( \007)입니다. 쉘 프롬프트에 이 순서를 포함시키십시오. ~을 위한세게 때리다, 다음과 같은 줄을 추가하세요 ~/.bashrc.

PS1="\[\033]2;xterm on $HOSTNAME\a\]$PS1";;

백슬래시 괄호 구두점은 \[…\]bash에게 내부 내용의 너비가 0임을 알려줍니다(괄호가 생략되면 표시가 깨집니다).

이 옵션을 설정하면 프롬프트 문자열에 변수 및 명령 대체를 포함시켜 각 명령 후에 변경되는 더 멋진 제목을 얻을 수 있습니다 promptvars.

zsh에서 제목을 설정하십시오.precmd기능, 각 프롬프트 전에 실행됩니다.

precmd () {
  print -n "\e]2;xterm on $HOSTNAME in $PWD\a"
}

이렇게 하면 preexec실행 중인 명령의 이름을 포함하도록 제목을 설정할 수 있습니다. 다음은 명령에서 인쇄할 수 없는 문자에 잘 반응하지 않는 간단한 접근 방식입니다.

preexec () {
  print -nr $'\e]2;'"xterm on $HOSTNAME running $2"$'\a'
}

관련 정보