2010-12-17 17 views
5

Estoy usando la línea de comando bash en OSX. Sé que la secuencia de escape ANSI \ 033 [21t recuperará el título de la ventana del terminal actual. Así, por ejemplo:Cómo capturar el título de una ventana de terminal en bash usando secuencias de escape ANSI?

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

Lo que me gustaría hacer es capturar esta información mediante programación en una secuencia de comandos, pero no puedo encontrar la manera de hacerlo. Lo que el script captura solo la secuencia de escape ANSI en bruto. Así, por ejemplo adicional, este pequeño script 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 

produce el siguiente resultado:

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

me gustaría la información en el segundo caso para que coincida con la información mostrada en el terminal, pero en cambio, todo lo que obtengo es la secuencia de comando sin procesar. (He intentado usar system() y capturar el resultado en un archivo, eso tampoco funciona). ¿Alguien sabe cómo hacer que esto funcione?

Respuesta

6

Como se detalla here tienes que usar trucos sucios para que funcione.

Aquí es un script modificado:

#!/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 
Cuestiones relacionadas