My Bash Prompt está configurando la barra de título de xterm usando la siguiente secuencia:
PS1='\033]0;\u@\h>\w\007'
¿Hay una manera fácil de mostrar el comando actual en la barra de título. Por ejemplo, si estoy siguiendo un archivo usando tail -f foo.log
, quiero que mi barra de título diga tail -f foo.log
.
bash
prompt
xterm
window-title
dogbane
fuente
fuente
.bashrc
después de cada comando en mi shell, obtengo esta salida0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}
. Supongo que puedo suprimir esta salida asignando el comando trap aPS1
? Sin embargo,PS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
no funciona. Conduce al errorbash: echo -ne "\033]0;$BASH_COMMAND\007": command not found
.trap
comando como un comando separado , no para asignarlo a PS1.(Inspirado por esta respuesta SU )
Puedes combinar un par de trucos de bash:
$BASH_COMMAND
contiene el comando actualmente en ejecuciónEntonces, atrapa DEBUG y haz que el controlador establezca el título en
$BASH_COMMAND
:Esto mantendrá el título cambiado hasta que algo más lo cambie, pero siempre y cuando
$PS1
permanezca igual no será un problema: inicia un comando, el controlador DEBUG cambia la barra de título, y cuando el comando termina, bash dibuja un nuevo pregunta y restablece su barra de título nuevamente.Un consejo útil que se encuentra aquí (también de dónde proviene esa respuesta SU) es incluir:
Esto hará que bash propague la trampa DEBUG a cualquier subshell que comiences; de lo contrario, la barra de título no se cambiará en ellos
fuente
ssh
/dev/tty
stderr?Trabajé alrededor de mi propia solución de varias publicaciones. Esto crea un título que contiene usuario, nombre de host, pwd, tty y el comando actualmente ejecutado (para bash).
Esto se ve así (no se ejecuta ningún comando):
Y así (ejecutando un comando):
En algún lugar de .bashrc, extendí PS1:
Agrega el comando actual, usando el historial 1 y trap :
Siéntase libre de adoptar sus necesidades.
fuente