Esta pregunta me ha estado molestando durante unos días, y aquí está mi publicación editada con todo el material que he aprendido. Específicamente, mi objetivo era lograr mostrar el reloj junto al indicador en BASH. Al igual que Radu Radeanu mencionó en su respuesta, la clave es encontrar una función o variable que pueda actualizar constantemente el símbolo del sistema o volver a dibujar la pantalla, sin interferir con su pantalla o con lo que escriba. Si bien esto es posible con el ciclo while, como lo muestra G_P, el rediseño constante de la pantalla con la función tput se confunde con el texto que esté en mi pantalla en el instante en que se actualiza. Me he acercado bastante a lograr lo que el OP solicitó modificando un poco el código que G_P publicó, pero aún creo que la respuesta de Radu es la más cercana a lo que OP quiere. Sin más preámbulos, he aquí algunas de las cosas que '
# 1, mi solución preferida: multiplexor terminal
Terminal multiplexer es un software que permite dividir la pantalla del terminal en dos o más pantallas. En particular, quiero llamar la atención sobre el terminal Byobu. Este emulador de terminal basado en ncurses le permite mostrar el tiempo, el porcentaje de CPU, la memoria y muchos otros indicadores. En la captura de pantalla de mi terminal byobu, puede ver la temperatura de la CPU, el porcentaje de batería, la calidad de la conexión a Internet, la frecuencia de la CPU, la RAM, la fecha y, por supuesto, el tiempo. Si te preocupa principalmente monitorear constantemente estas cosas mientras estás en la terminal, Byobu es el camino a seguir. De hecho, me ha gustado tanto que lo configuré para que se cargue automáticamente al iniciar sesión en tty. La única peculiaridad es que en tty no puedes fusionar las ventanas separadas, solo cambia entre pestañas con las teclas F3 y F4.
Una solución alternativa que involucra ventanas de multiplexación es mediante el uso splitvt
, que divide la pantalla en dos partes. Puede ejecutar un reloj de terminal como tty-clock
, usar el comando watch con fecha, o puede codificar uno usted mismo con un script. Más sobre eso más tarde. En la captura de pantalla, puede ver una parte de la división con el indicador bash normal en la parte superior, y en la parte inferior puede ver un script en ejecución, que simplemente actualiza constantemente la salida del date
comando con el clear
comando.
# 2, While Do Loop y tput
Esto es probablemente lo más cercano a lo que la persona que hizo la pregunta quería implementar con bash.
G_P ha publicado una gran solución que involucra los comandos while do
y tput
. Sin embargo, en el código de G_P había dos cosas que no me gustaban. Uno, el reloj estaba a la derecha del indicador, y dos, porque el ciclo de suspensión es de 1 segundo (consulte el código original donde dice suspensión), la pantalla se redibuja cada segundo, y eso daña mi salida. Lo que hice fue editar mi indicador bash para que esté una línea más abajo con \ n operador y cambiar el código de G_P para que el operador tput coloque el reloj justo encima del indicador y se actualice cada 60 segundos; eso me permite ver horas y minutos (y no me importan exactamente los minutos), mientras que el bucle del reloj no estropea mi pantalla. Primero, aquí está mi mensaje:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
Y aquí está el código modificado de G_P: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
Edición pequeña : he notado que este código anterior no muestra el reloj de inmediato a veces. Aquí hay una versión mejor: while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
esta coloca el reloj en la pantalla primero, luego le avisa a bash para que pase por el ciclo de sueño de 60 segundos
Tenga en cuenta que el tput cup 0 0 coloca el reloj en la esquina superior derecha de la pantalla, justo encima de mi indicador y sleep 60 cambia el ciclo de sueño a 60 segundos, porque de esa manera puedo monitorear solo horas y minutos en lugar de cada segundo. De esta manera, el texto que tengo en la pantalla no se ve afectado, en su mayor parte (solo cuando ejecuto un comando al mismo tiempo que se actualiza el reloj).
La línea PS1 ya está en su perfil .bashrc, por lo que solo necesita modificarla un poco. El bucle while do debe agregarse en algún lugar del mismo archivo, preferiblemente al final con # comentario de que esto es algo que agregó inicialmente. Y no olvides siempre hacer una copia de seguridad de cualquier archivo así en caso de que hagas bubu y necesites volver a ser como antes.
# 3, secuencias de comandos y otros
Esta parte es simplemente para aquellos que quieren ver el tiempo. Para aquellos que desean monitorearlo constantemente, las opciones preferidas son la n.º 1 y la n.º 2.
Entonces, como ya hemos visto, el bucle while do es bastante útil. Así es como puede crear un reloj con los comandos while do loop, date y sleep.
Presione regresar / ingresar, y básicamente verá la salida del comando de fecha que se muestra en la pantalla borrada cada segundo. Si no quieres escribir todo eso cada vez, convierte todo esto en script:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Ahora puede ejecutar ese script con splitvt en una instancia de bash, mientras trabaja en la otra.
Otra solución es el watch -n1 date
comando, que ejecutará continuamente el comando de fecha con un período de 1 segundo.
En conclusión: he aprendido algunas cosas al tratar de encontrar la respuesta a esta pregunta, y espero que mis hallazgos lo hayan ayudado de alguna manera, y espero haber podido contribuir en esta pregunta. Byobu terminal IMHO es la mejor solución, pero decide por ti mismo, investiga un poco y elige la forma que mejor funcione para ti.
Algunas de las cosas que he encontrado al investigar:
Mi publicación original, la solución minimalista: edite su archivo ~ / .bashrc. Prefiero editarlo con nano, así que
nano ~/.bashrc
Aquí está la parte de mi propio archivo editado:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
Después de la instrucción else, la primera línea se comenta con # (este es mi antiguo indicador), ahora la segunda línea es la que desea, y específicamente el \t
operador. Eso muestra el tiempo de ejecución en formato de 24 horas. Para más información mira esto . También una pequeña nota, estoy usando las cosas después de otra cosa, porque no estoy usando un indicador de color.
PD: Por favor, avíseme si debo agregar algo a mi respuesta o editarlo de alguna manera, pero en su mayor parte creo que esta es la respuesta más concluyente que se me ocurre, y al menos personalmente no agregaré nada. nuevo en esto.
$PS1
variable (solicitud) para que tenga tiempo, pero no estoy seguro de si los cambios.