Как захватить заголовок окна терминала в bash, используя escape-последовательности ANSI? - PullRequest
5 голосов
/ 17 декабря 2010

Я использую командную строку bash в OSX.Я знаю, что управляющая последовательность ANSI \ 033 [21t будет извлекать заголовок текущего окна терминала.Так, например:

$ echo -ne "\033[21t"
...sandbox... 
$ # Where "sandbox" is the title of the current terminal window
$ # and the ... are some extra control characters

Что я хотел бы сделать, это записать эту информацию программно в сценарии, но я не могу понять, как это сделать.То, что сценарий фиксирует только необработанную escape-последовательность ANSI.Итак, для дальнейшего примера, этот маленький скрипт Ruby:

cmd = 'echo -ne "\033[21t"'
puts "Output from echo (directly to terminal):"
system(cmd)
terminal_name=`#{cmd}`
puts "\nOutput from echo to variable:"
puts terminal_name.inspect

Создает следующий вывод:

Output from echo (directly to terminal):
^[]lsandbox^[\
Output from echo to variable:
"\e[21t"

Я бы хотел, чтобы информация во втором случае соответствовала информации, показаннойтерминал, но вместо этого все, что я получаю, это необработанная последовательность команд.(Я попытался использовать system () и записать вывод в файл - это тоже не работает.) Кто-нибудь знает способ заставить это работать?

1 Ответ

6 голосов
/ 28 апреля 2011

Как подробно здесь вы должны использовать грязные уловки, чтобы заставить это работать.

Вот модифицированный скрипт:

#!/bin/bash
# based on a script from http://invisible-island.net/xterm/xterm.faq.html
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
# on my system, the following line can be replaced by the line below it
echo -en "\033[21t" > /dev/tty
read -r x
stty $oldstty
echo $x   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...