Mantenga la entrada bash en la línea superior de la pantalla
12
Me gustaría mantener la bashentrada del símbolo del sistema en la parte superior de la pantalla para que las salidas de los comandos más antiguos se empujen hacia abajo en lugar de hacia arriba.
Entonces, si tiene catun archivo, ¿sería un orden inverso?
caos
No, pero me gustaría que los trozos de producción se empujaran hacia abajo
Tom Price
1
bashno puede hacer esto, porque bashni siquiera sabe acerca de las posiciones de la pantalla: simplemente escribe en un archivo de salida. Necesitaría un emulador de terminal que conozca bashla solicitud interactiva para saber cuándo restablecer el cursor y cuándo desplazar la ventana.
chepner
Gracias @chepner, estoy revisando este problema y tu comentario me hizo mirar fuera de bash y comenzar a mirar toda la pila de pantallas. Quiero permanecer dentro de las consolas virtuales basadas en texto (es decir, no X Windows) por lo que estaría evitando emuladores de terminal por ahora, pero para mis sesiones de GUI ciertamente lo investigaré. En caso de que alguien se encuentre con esta pregunta, supongo que tiene que ver con tty y actualmente estoy buscando inspiración aquí ... linusakesson.net/programming/tty
Tom Price
Respuestas:
7
Agregue estas líneas a su .bashrc:
prompt_on_top() {
tput cup 0 0
tput el
tput el1
}
pre_cmd() {
if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] || [ -n "$COMP_LINE" ]; then
return
fi
printf "\33[2J"
}
PROMPT_COMMAND="prompt_on_top"
trap 'pre_cmd' DEBUG
bashtener PROMPT_COMMAND , que contiene el comando se ejecutará antes de bashmostrar el mensaje. Aquí lo configuramos para que funcione prompt_on_top, que usa tput para establecer el cursor en la parte superior de la pantalla.
bashTambién tiene una forma de ejecutar un comando antes de ejecutar cualquier comando, utilizando trap para manejar la señal DEBUG. Aquí lo configuramos para que funcione pre_cmd, lo que borrará la pantalla anterior y no hará nada si completamos ( COMP_LINE no está vacío) o ejecutamos el comando BASH_PROMPT.
Hay un límite con este enfoque, si la salida del comando es demasiado larga y no cabe en una pantalla, la salida se anulará por prompt_on_topacción. En este caso, debe canalizar la salida a un localizador para leer la salida completa.
Gracias por su respuesta bien explicada, hay muchas cosas para leer y aprender. He probado su secuencia de comandos, y actualmente borra efectivamente la salida anterior de la pantalla entre comandos. Me gustaría mantener las salidas anteriores en la pantalla, debajo de la solicitud, y tenerlas de modo que se inserten nuevas salidas entre la solicitud y la salida anterior, por lo tanto, empuje la salida anterior hacia abajo en la pantalla.
Tom Price
Para aquellos que vienen aquí a través de una búsqueda en la web, este código github.com/swirepe/alwaysontop también "mantiene su aviso de bash en la parte superior de la pantalla", además de un par de otras funciones. Sin embargo, no responde la pregunta original: las salidas de comandos anteriores se eliminan como con el código de cuonglm.
WillC
Otro inconveniente de esta solución es que no tiene comentarios sobre qué comando se ejecutó por última vez. Es decir, cat filemostrará filecontenido, pero no obtendrá una respuesta inmediata del comando exacto ejecutado. Idealmente, la solicitud se seguiría con una versión no expandida + expandida del comando ejecutado, seguida de la salida estándar.
cat
un archivo, ¿sería un orden inverso?bash
no puede hacer esto, porquebash
ni siquiera sabe acerca de las posiciones de la pantalla: simplemente escribe en un archivo de salida. Necesitaría un emulador de terminal que conozcabash
la solicitud interactiva para saber cuándo restablecer el cursor y cuándo desplazar la ventana.Respuestas:
Agregue estas líneas a su
.bashrc
:bash
tener PROMPT_COMMAND , que contiene el comando se ejecutará antes debash
mostrar el mensaje. Aquí lo configuramos para que funcioneprompt_on_top
, que usa tput para establecer el cursor en la parte superior de la pantalla.bash
También tiene una forma de ejecutar un comando antes de ejecutar cualquier comando, utilizando trap para manejar la señalDEBUG
. Aquí lo configuramos para que funcionepre_cmd
, lo que borrará la pantalla anterior y no hará nada si completamos ( COMP_LINE no está vacío) o ejecutamos el comandoBASH_PROMPT
.Hay un límite con este enfoque, si la salida del comando es demasiado larga y no cabe en una pantalla, la salida se anulará por
prompt_on_top
acción. En este caso, debe canalizar la salida a un localizador para leer la salida completa.fuente
cat file
mostraráfile
contenido, pero no obtendrá una respuesta inmediata del comando exacto ejecutado. Idealmente, la solicitud se seguiría con una versión no expandida + expandida del comando ejecutado, seguida de la salida estándar.