En bash, para mostrar el nombre del programa actual en la línea de estado duro de la pantalla GNU solo se necesitan dos líneas de configuración. Primero, diga a la pantalla cómo se ve normalmente el final de su mensaje y proporcione un título predeterminado para una ventana cuando esté sentado en el shell:
shelltitle "$ | bash"
A continuación, coloque esta secuencia de escape en la variable PS1, antes de los caracteres que normalmente terminan la solicitud '$ '
en este caso:\033k\033\\
Esta técnica funciona, hasta cierto punto. El título de la ventana hardstatus se actualiza al nombre del programa que se está ejecutando actualmente, y luego vuelve al título predeterminado poco después de que finaliza la ejecución. Sin embargo, un problema importante es que esta cadena de escape no se escapa por sí misma, lo que causa problemas de ajuste de línea con comandos más largos que la línea inicial.
Esto era molesto, así que me puse a buscar una solución. Resulta que simplemente escapar de la secuencia de escape anterior corrige el ajuste de línea:\[\033k\]\[\033\\\]
¡Excelente! El título de mi ventana hardstatus todavía se actualiza al nombre del programa que se está ejecutando actualmente, y ahora mis comandos más largos se ajustan correctamente a la segunda línea. Sin embargo, con esta nueva secuencia de escape en mi PS1, la pantalla actualiza el título de la ventana al comando real que estoy escribiendo, no simplemente el nombre del programa actual una vez que se ejecuta.
Me pregunto, ¿alguien ha conseguido que esto funcione correctamente, es decir, ajuste de línea y actualización adecuada del título de la ventana de estado duro?
fuente
echo test; less somefile
seecho
mostrará como el título de la ventana en lugar de hacerloless
. ¿Es lo que quieres que seless
muestre en su lugar?<pre>
. Al igual que Dennis, no entiendo lo que estás tratando de lograr exactamente, ¿podrías darnos un ejemplo?Respuestas:
No creo que la pantalla sea el lugar adecuado para actualizar esa copia. Es realmente fácil hacerlo desde las configuraciones de su shell. Puede definir una
preexec()
función en su archivo shellrc que envíe detalles de lo que está a punto de ejecutar antes de que lo haga. Puede imprimir desde allí para indicarle a la pantalla que cambie el título de la ventana actual. Estoy usando zsh, no bash, por lo que su kilometraje variará, pero sé que las mismas cosas también son posibles allí. Como referencia en mi archivo zshrc, tengo algo como esto:En realidad, hago una limpieza del comando antes de mostrarlo como el título. Por ejemplo, puede usar
print -Pn "^[k`echo $2|perl -pne 's!\s.*/! !g'|cut -c1-16`^[\\"
el preexec () anterior para mostrar información mucho más limpia sobre lo que está a punto de ejecutarse. Esto quita los caminos al último componente y hace algunos trucos ninja.fuente
Las instrucciones de trabajo para Bash están a continuación. Supongo que trabaja con un usuario root , por lo tanto, # se usa en
shelltitle
. Para usuarios normales use $.screenrc
.bashrc
fuente