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