쉘 스크립트만 사용하여 Linux에서 창 제목을 얻는 방법은 무엇입니까?

쉘 스크립트만 사용하여 Linux에서 창 제목을 얻는 방법은 무엇입니까?

상자에 screen이나 xproc과 같은 도구를 설치할 수 없습니다. 제목을 수정할 필요는 없고 창 제목 이름만 찾으면 됩니다.

echo -e "\033]0;[title]\07";제가 아는 대로 제목을 수정합니다. 하지만 기존 헤더 이름을 알고 싶습니다.

답변1

다음을 시도해 보십시오. 그러나 호환성이 매우 제한되어 있습니다. 아래 참고 사항을 참조하세요.

get_title(){(
        set -e
        ss=`stty -g`; trap 'exit 11' INT QUIT TERM; trap 'stty "$ss"' EXIT
        e=`printf '\033'`; st=`printf '\234'`; t=
        stty -echo -icanon min 0 time "${2:-2}"
        printf "${1:-\033[21t}" > "`tty`"
        while c=`dd bs=1 count=1 2>/dev/null` && [ "$c" ]; do
                t="$t$c"
                case "$t" in
                $e*$e\\|$e*$st)
                        t=${t%$e\\}; t=${t%$st}; printf '%s\n' "${t#$e\][lL]}";
                        exit 0;;
                $e*);;
                *) break;;
                esac
        done
        printf %s "$t"; exit 1
)}

예:

$ get_title
$ title=`get_title`

또는 스크립트의 표준 입력이 터미널이 아닌 경우:

$ title=`get_title </dev/tty`

stty+ kludge는 dd터미널이 응답으로 이스케이프된 항목을 보고하지 않는 경우 스크립트가 차단되지 않도록 시도합니다 \e[21t. 이(또는 더 나은) 접근 방식은 다른 제어 시퀀스(예: 커서 위치 가져오기)와 함께 사용할 수도 있습니다.

노트:

이스케이프는 "안전하지 않은" 것으로 간주 되므로 \e[21t이를 작동시키려면 추가 구성이 필요합니다.

을 위한 xterm:echo '*.vt100.allowWindowOps: true' | xrdb -override

을 위한 urxvt:echo 'Rxvt.insecure: true' | xrdb -override

그럴 것이다전혀 작동하지 않습니다gnome-terminal, mate-terminal, xfce4-terminal등과 같은 vte 기반 터미널에서 보고된 대로서서히 나아가는("터미널") 또는비어 있는응답의 헤더.

mlterm특별한 것은 필요하지 않지만 이전에 헤더가 설정되지 않은 경우 \e]2;TITLE\a(오류는안정적인현재 자원에서).

screen-tC-a A실행 중인 창의 제목이 아니라 자체 창 제목(옵션이나 명령을 사용하여 설정된 제목)을 보고합니다 .

차단되었으며 지원되지 않습니다 tmux.

답변2

예를 들어, konsole현재 상호 작용 bash인스턴스가 실행 중인 창의 제목을 가져옵니다.

#!/bin/bash

get_title() {

    local pid=$$
    local pids=`pstree -lpsT $pid | tr '-' '\n' | tac | xargs | grep -oE '[0-9]+'`

    for pid in $pids
    do
        local wid=`xdotool search --pid $pid`
        if [ ! -z "${wid}" ]
        then
            echo `xdotool getwindowname $wid`
            exit
        fi
    done
}

get_title

관련 정보