2010-12-17 12 views
5

Używam wiersza polecenia bash w OSX. Wiem, że sekwencja escape ANSI \ 033 [21t pobierze tytuł bieżącego okna terminala. Tak więc, na przykład:Jak przechwycić tytuł okna terminala w bashu używając sekwencji kontrolnych ANSI?

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

Co chciałbym zrobić, to uchwycić tę informację programowo w skrypcie, ale nie mogę dowiedzieć się, jak to zrobić. Co skrypt przechwytuje tylko surową sekwencję escape ANSI. Tak więc, na kolejnym przykładzie, ta mała Ruby skrypt:

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 

Produkuje następujący wynik:

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

chciałbym informacje w drugim przypadku pasujące informacje wyświetlane na terminalu, ale zamiast tego dostaję tylko surową sekwencję poleceń. (Próbowałem używać system() i przechwytywać dane wyjściowe do pliku - to też nie działa.) Czy ktoś wie, jak to działa?

Odpowiedz

6

Jako szczegółowe here musisz użyć brudnych sztuczek, aby to zadziałało.

Oto zmodyfikowany skrypt:

#!/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 
Powiązane problemy