Terminal de GNOME - nombre del proceso en el título de la pestaña


9

¿Cómo puedo colocar el nombre del proceso actual en ejecución en un título de la pestaña de GNOME Terminal (o barra de título cuando solo hay una pestaña)?

- ACTUALIZACIÓN -

Para aclarar, quiero que el título de la pestaña se actualice cuando ejecuto un proceso, por ejemplo:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"

Respuestas:


8

Lo encontré. Este sitio Proporciona una buena explicación de una solución.
En tu bashrc, se vería como:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

Personalmente, no creo que lo agregue a mi bashrc, porque la DEBUG combinada con trace hace que se descargue una gran cantidad de basura cuando se inicia todo el shell. Si puedes vivir con eso, realmente funciona. Sin embargo, muestra el comando completo, no solo la primera palabra.


2
Gracias por hacer una buena pregunta. Esto parecía una pregunta simple al principio ... ¡Después de los primeros 10 minutos, estaba empezando a volverme loco! Por eso pensé que era una buena pregunta: suena simple, pero me obligó a aprender algo más profundo sobre la interacción entre el shell, el terminal y las señales.
DaveParillo

porqué el PS1 -¿asignación? para mí es una tontería, y realmente no parece necesario aquí ...
Blauhirn

3

Bueno, ya que todos parecen conocer la solución de David Pashley, me sorprende que me haya costado tanto encontrarla porque es casi tan antigua.

Esta solución realmente se encarga de bash-basura spamming basura.

Para ser claros: aquí no hice nada por mi cuenta, solo la investigación. Todo el crédito va a Marius gedminas .

Esto funciona perfectamente para mí con Gnome-Terminal / Terminator

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

También esta es una poste transversal porque me acabo de enterar y quería compartir y creo que también es útil aquí.


2

Lo de abajo debería funcionar. Tengo la función en un .bash_functions archivo, y fuente en el .bashrc archivo antes de configurar $PROMPT_COMMAND.

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

1
Estás cerca, pero no tengo mucho mejor. Esto te dará la ultimo ejecutado comando, pero en realidad no es lo que persigue la madurez. Pensé que solo estaba cambiando term_title a: `if [jobs]; entonces la historia 1 | awk '{print $ 2}'; de lo contrario, echo -ne 'bash em' fi 'funcionaría, pero es inconsistente en cuanto a los procesos de captura con tiempos de vida cortos y todavía no vuelve a cambiar cuando finaliza el proceso. No sé sobre el funcionamiento interno de xterm para saber cómo manipular esos desencadenantes / eventos.
DaveParillo

bash ejecuta $ PROMPT_COMMAND justo antes de mostrar el indicador, por lo que esto es lo mejor que puedo hacer con este enfoque. Puede haber otros desencadenantes que pueden ejecutarse justo después de presionar Enter, pero no sé de ellos.
nagul

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.