PS1의 .bashrc에 있는 \[\e]0;의 의미

PS1의 .bashrc에 있는 \[\e]0;의 의미

존재하다.bashrc

case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

이해 ${debian_chroot:+($debian_chroot)}\u@\h: \w하지만 이해가 안 돼요 \[\e]0;. 그것은 무엇을 합니까?

답변1

이것은 ASCII 27(ESC)로 대체된 \e]0;이스케이프 시퀀스 \e이므로 터미널은 xterm 에 BEL()로 끝나는 ESC ] 0 ;아이콘과 제목 표시줄을 설정하도록 지시 하는 4개의 문자를 수신합니다.\a

따라서 이 시퀀스는 \e]0;STUFFGOESHERE\a터미널의 헤더를 STUFFGOESHERE로 설정합니다. 귀하의 예에서는 헤더를 user/host/path로 설정합니다.

FWIW, xterm 이스케이프 시퀀스는 다음 위치에 문서화되어 있습니다.https://www.x.org/docs/xterm/ctlseqs.pdf

답변2

\e]0;줄에 있는 문자

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

쉘에 의해 해석됨( \eASCII \033ESC 와 동일)탈출하다특징),시작탈출 시퀀스. 순서마치다on \a(쉘 \007` ASCII BEL로도 해석됨)).

이것은 0매개변수입니다(소위운영 체제 명령), 터미널에 아이콘과 창 제목을 변경하라고 지시합니다.

기술적으로는 (ECMA-48)이어야 \e\\하지만 처음에는 그런 식으로 시작되지 않았습니다. 1986년에 이 기능이 처음 도입되었을 때 xterm제목은 인쇄할 수 없는 첫 번째 문자로 끝났습니다. 1989년 X11R4 이후 xterm에 의해 문자열 종결자로 인식됩니다 \a(아이콘과 창 제목을 구별하기 위해 별도의 매개변수 1및가 추가된 경우 2).

rxvt나는 몇 년 후에 이것을 발견했고 몇 년 후에 xterm이 다음과 같이 수정되었습니다.반품표준 문자열 종결자를 허용합니다. 변경 로그에는 구체적으로 언급되어 있지 않지만 ctlseqs.ms1996년 8월에 처음 나타났습니다. 일반적으로 기능은 다른 터미널이 구현한 경우에만 허용됩니다 \a.

후행이 없으면 격리된 이스케이프 문자는 터미널별 방식(텍스트 전체 무시 포함)에서 오류로 처리될 수 있습니다.

추가 자료:

편집: 오타 수정

관련 정보