¿Cómo hacer que la barra superior de mi terminal diga qué comando se está ejecutando?

13

A menudo ejecuto comandos en paralelo que tardan mucho tiempo en finalizar y, a veces, pierdo el rastro de lo que se está ejecutando, ya que generan básicamente el mismo tipo de información en la pantalla.

¿Conoces alguna forma de averiguar qué comando se está ejecutando en qué terminal?

Luca Minciullo
fuente
1
No estoy seguro de si esto todavía funciona, pero esto también podría ayudar, además de la excelente respuesta de @dessert. → askubuntu.com/questions/774532/…
Videonauth

Respuestas:

12

Tomado de Bash: actualice el título del terminal ejecutando un segundo comando · U&L y ligeramente modificado:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

Esto (ab) usa la DEBUGseñal como disparador para actualizar el título con la última entrada de su historial, es decir, el último comando que ejecutó, a través de una secuencia de control XTerm . Agregue la línea a su ~/.bashrcpara habilitar la función en cada nueva ventana de terminal.

Para imprimir otra salida de comando junto con el título, diga el directorio actual pwdseguido de ":" y el comando actualmente en ejecución, recomiendo usar printflo siguiente:

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

Algunos emuladores de terminal le permiten especificar un título dinámico e incluso le dan el nombre del comando como una opción para que ni siquiera necesite jugar: busqué y lo encontré en yakuakela configuración del perfil.

postre
fuente
2

El título de la ventana del terminal se puede cambiar cambiando el valor de la variable $PS1: la cadena de solicitud primaria. [1] [2] . Podríamos combinar esta solución con la idea de usar el comando de la respuesta de Dessert . history


Enfoque 1: actualice el valor de forma $PS1automática. (Actualizar)

Agregue las siguientes líneas al final del archivo ~/.bashrc:

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

Luego, source ~/.bashrco simplemente abra una nueva terminal y use la función de esta manera:

  • Ejecute rtitlepara comenzar a cambiar el título de la ventana del terminal automáticamente, según el último comando ejecutado.
  • Ejecute rtitleuna vez más para volver al comportamiento predeterminado.

Enfoque 2: actualice el valor de forma $PS1manual. (Respuesta inicial)

Agregue las siguientes líneas al final del archivo ~/.bashrc:

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

Luego, source ~/.bashrco simplemente abra una nueva terminal y use la función de esta manera:

  • set-title <something>cambiará el título de la ventana de terminal a <something>.
  • set-title sin argumento cambiará el título de la ventana de terminal al comando anterior.

Referencias y ejemplos:

pa4080
fuente