Linux Как получить заголовок окна с простом сценарием оболочки?

Я нашел решение своей проблемы, прочитав некоторые сообщения/ответы, ссылки на которые есть в колонке "связанные" справа. Я скопировал файлы на жесткий диск usb с файловой системой ntfs. Поиск не выполнялся. Когда я скопировал их на usb-накопитель с файловой системой fat, они были найдены, и установка могла продолжаться.

0
20.11.2018, 04:20
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+ ddпытается убедиться, что сценарий не просто заблокируется, если терминал ничего не сообщит в ответ на побег \e[21t. Этот (или лучший )подход можно также использовать с другими управляющими последовательностями (, например. чтобы получить позицию курсора ).

Примечания:

Поскольку побег \e[21tсчитается «небезопасным», для его работы требуется дополнительная настройка.:

Дляxterm:echo '*.vt100.allowWindowOps: true' | xrdb -override

Дляurxvt:echo 'Rxvt.insecure: true' | xrdb -override

Это вообще не будет работать в терминалах на базе vte -, таких как gnome-terminal, mate-terminal, xfce4-terminalи т. д., поскольку они сообщают либо о подделке(" Терминал" )или пустой заголовок в ответ.

mltermничего особенного не нужно, но (рухнет! )если заголовок не был установлен ранее с\e]2;TITLE\a(эта ошибка была исправлена ​​в текущих источниках ).

screenсообщит о своем собственном заголовке окна (, который был установлен с помощью опции -tили команды C -a A , а не заголовка окна, в котором он работает.

Он заблокирован и не поддерживается в tmux.

1
28.01.2020, 04:09

Теги

Похожие вопросы