¿Existe la posibilidad de obtener el tipo de terminal con un comando?
Si estoy usando gnome-terminal, la salida debería ser gnome-terminalo algo similar. También sería bueno obtener la versión del terminal.  
Actualizar
ps -aux | grep `ps -p $$ -o ppid=` 
generará algo como esto:
user     4239  0.0  0.7 292708 15744 pts/8    Sl   11:39   0:02 xfce4-terminal
user     4800  0.0  0.0   6176   820 pts/0    S+   12:23   0:00 grep --color=auto  4239
Esto también funcionará con xterm, pero ¿cómo obtengo solo el nombre ( xfce4-terminalen este caso)?
                    
                        command-line
                                
                    
                    
                        TuKsn
fuente
                
                fuente

window 31457282 has no pid associated with it(probado en Lubuntu)Respuestas:
Versión original
Una forma de hacerlo es obtener el proceso principal de su sesión de shell actual y, a partir de ahí, el nombre del terminal.
Obtenga el padre del proceso de shell actual. La variable bash
$$es el PID de su shell actual, por lo que podemos darle eso como una consulta aps(-p $$) y pedirle que imprima el PID del proceso padre (-o ppid=el final=es evitar imprimir encabezados de columna):Entonces, el PID del padre de mi shell es
544.Obtenga el proceso asociado con ese PID e imprima su línea de comando
El resultado anterior dependerá de qué emulador de terminal esté usando, estoy usando
terminator.Combina todo en un solo comando
Use eso para obtener la versión
Agregue una pequeña función a su
~/.bashrcque devuelva el nombre y la versión del emulador de terminal que está utilizando (esto funciona para los emuladores de terminal más comunes):Ahora puede obtener el nombre del terminal y también pasarle cualquier opción que desee (como
--version.Algunos ejemplos con diferentes terminales:
xtermterminatorrxvt, Éste tiene ninguno de los-V,-versiono--versionbanderas por lo que no se imprime información de la versión.gnome-terminal.konsolelxterminalxfce4-terminalNuevo y mejorado
Sin embargo, el enfoque anterior no es tan confiable. Se ahogará cuando ejecute su shell después de
suacceder a otro usuario o cuando su terminal tenga un alias para algo y otros casos. Como obviamente estamos trabajando con programas X aquí, una mejor manera podría ser usar algo comoxdotool(instalable consudo apt-get install xdotool) para obtener la información:Lo anterior imprimirá la línea de comando utilizada para iniciar la ventana actualmente activa. Dado que su terminal, presumiblemente, estará activo, ese es el comando que mostrará. Esto significa que para la mayoría de los emuladores de terminal, puede asumir con seguridad que el primer campo devuelto es el nombre del terminal:
Esto significa que obtener la versión es trivial. Por ejemplo
No es así para
gnome-terminal:o
terminator:Entonces, podemos hacerlo un poco más complejo (hay algunos bashismos aquí, este no es portátil):
Esto funciona para todos los casos que probé.
fuente
$PPIDpara obtener el PID del proceso padre.kshotcsh. Sin embargo, es una muy buena idea para la familia bash, ya que es mucho más simple que mi enfoque.ksh93ymksh.Prueba esto,
O
fuente
rxvtyterminatory la segunda falla enuxtermygnome-terminal(lo imprime/usr/lib/gnome-terminal/gnome-terminal-server). Todos fallarán (al igual que los míos) si está utilizando una sesión su.$PPIDes el PID del proceso padre del shell.commsignifica comando . Puede o no ser una ruta completa, por lo que usamosbasenamepara eliminar la ruta si es necesario.Advertencias
Probablemente, esto también se aplica al menos a algunas de las otras respuestas.
commes técnicamenteargv[0], lo que en realidad puede ser una cadena arbitraria. Pero, en general, debería poder confiar en él para este caso en particular.Esto no funcionará como se espera si se conecta a través de SSH o usa
tmux,screeno algo similar.fuente
termincomo salida.$PPIDno es estándar en todos los depósitos. por ejemplo, entcshobtengo:PPID: Undefined variable.Puedes probar el siguiente comando:Actualización (gracias a OP y Avinash Raj):
fuente
gnome-terminal 3.6.2-0ubuntu1len xterm?Otra posibilidad (no perfecta) es:
Pero esto no funciona con lxterminal porque hay una variable de entorno
$WINDOWIDvacía ...Terminator muestra el nombre "x-terminal-emulator".
fuente
El terminal actual también se puede detectar a través de una secuencia de escape: los atributos del dispositivo (DA secundaria)
Por ejemplo en bash:
Esto devuelve solo algún tipo de identificación, y lamentablemente no conozco una lista oficial que los traduzca a los nombres reales.
Para una implementación real, que traduce algunos identificadores conocidos a nombres de terminales, vea este script bash de ejemplo: https://github.com/mintty/utils/blob/master/terminal
fuente