bash 스크립트는 창 제목 이스케이프 문자에 대한 지원을 어떻게 감지합니까?

bash 스크립트는 창 제목 이스케이프 문자에 대한 지원을 어떻게 감지합니까?

bash에 명령이 입력될 때마다 실행되는 디버그 트랩이 있는데, 이는 실행 중인 명령을 나타내기 위해 창 제목을 설정합니다. 모든 구성 세부 사항을 생략하고 다음과 같이 정리했습니다.

export PS1="\[\e]0;$GENERATED_WINDOW_TITLE\a\]$GENERATED_PROMPT"

이것은 매우 잘 작동하지만 한 가지 문제가 있습니다. bash 쉘이 이 기능을 지원하지 않는 환경에서 실행되면 GENERATED_WINDOW_TITLE이 모든 프롬프트와 함께 화면에 인쇄됩니다. X가 아닌 터미널에서 bash를 실행할 때마다 이런 일이 발생합니다.

bash는 이 이스케이프 시퀀스가 ​​지원되는지 어떻게 확인합니까?

답변1

나는 이것을 할 수 있는 terminfo 함수가 없다고 생각합니다. 실제로 테스트된 값은 TERM충분해야 합니다. 이것이 제가 .bashrc두 가지 모두에서 한 일 .zshrc이며 이것이 문제가 되었던 기억이 나지 않습니다.

case $TERM in
  (|color(|?))(([Ekx]|dt|(ai|n)x)term|rxvt|screen*)*)
    PS1=$'\e\]0;$GENERATED_WINDOW_TITLE\a'"$PS1"
esac

답변2

이 목적으로 (잘못) 사용되는 terminfo 항목이 있으며, 다양한 터미널 설명에 적용할 것을 제안하는 여러 버그 보고서의 주제였습니다. 인용하다 terminfo(5):

   has_status_line           hs     hs   has extra status
                                         line
   from_status_line          fsl    fs   return from status
                                         line
   to_status_line            tsl    ts   move to status line,
                                         column #1

이 섹션에서는 이에 대해 설명합니다.상태 표시줄:

상태 라인이 있는 일부 터미널에서는 상태 라인에 액세스하려면 특별한 순서가 필요합니다. 이는 단일 인수를 사용하여 문자열로 표시될 수 있습니다.tsl상태 표시줄에 표시된 0 소스 열로 커서를 가져옵니다.

그런데 문서화된 기능을 지원하는 유일한 터미널 에뮬레이터는 다음과 같습니다.kterm.

하나확장하다적절할 것입니다. 프로그램 screen은 가능한 선택을 기록합니다(그러나 내용을 검토한 후하다이 기능을 사용하면 아이디어가 포기되었습니다.) ncurses는 이미 터미널 데이터베이스에 있는 확장 기능을 제공합니다.몇 년, 약에 녹음됨XTerm 확장:

# TS is a string capability which acts like "tsl", but uses no parameter and
#    goes to the first column of the "status line".

궁극적으로 이 함수를 사용하는 모든 항목은 다음에서 상속됩니다.xterm+sl:

# These building-blocks allow access to the X titlebar and icon name as a
# status line.  There are a few problems in using them in entries:
#
# a) tsl should have a parameter to denote the column on which to transfer to
#    the status line.
# b) the "0" code for xterm updates both icon-title and window title.  Some
#    window managers such as twm (and possibly window managers descended from
#    it such as tvtwm, ctwm, and vtwm) track windows by icon-name. Thus, you
#    don't want to mess with icon-name when using those window managers.
#
# The extension "TS" is preferable, because it does not accept a parameter.
# However, if you are using a non-extended terminfo, "TS" is not visible.

(저주)tput프로그램은 이 기능을 테스트할 수 있습니다.

관련 정보