Cómo poner la fecha y hora siempre visible en la terminal

Dicen que una imagen vale más que mil palabras, es por ello que antes de explicarles algo, les mostraré cuál es el resultado del comando que pondré luego:

Noten como en la esquina superior derecha nos aparece el día de la semana (dom, domingo), el mes (dic), el día (22) así como la hora, minuto, segundo y año.

Es algo que se actualiza en tiempo real, o sea, cada un segundo se actualiza esa información, y siempre estará en la esquina superior derecha de la terminal.

Esto es algo útil pues, podemos estar editando un archivo con nano o vi, podemos estar instalando cualquier tipo de servicio o administrando lo que sea, y no necesitaremos detener lo que hacemos, ejecutar date en la terminal para así saber la fecha u hora, con este tip que les muestro siempre la tendremos presente.

Para lograr esto en una terminal pongamos lo siguiente:

while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &

Esto como tal no es un comando o instrucción simple, sino más bien una unión de ellos … vamos, un script también podría ser. Explicarlo es un tanto complejo, no obstante haré mi mejor esfuerzo 🙂

  • while sleep 1;do : Esto significa que cada un segundo se ejecutará lo siguiente
  • tput sc : Significa que se guardará la posición actual, o sea, que la posición de lo que vendrá a continuación se guardará, no volverá a ser necesario especificarla después de una vez.
  • tput cup 0$(($(tput cols)-29)) : Esto puede parecer complicado no obstante, no es tan difícil. Básicamente esto es lo que dice la posición, o sea, la esquina superior derecha. El parámetro cup especifica el espacio vertical que existirá, como ponemos 0 entonces significa “justo arriba, en el top”. Una vez definido la posición vertical nos queda ver la horizontal, de lo cual se encarga el resto de los parámetros, que para decirlo de forma simple… calcula las columnas existentes y se encarga de que esté justo en el borde derecho. Si lo desean cambien el número 29 por otros y notarán la diferencia.
  • date : Bueno esto es simple, date nos muestra la información que vemos … día, mes, hora, etc.
  • tput rc : Son tput sc guardamos la posición, ahora con tput rc la restauramos.
  • done : Aquí terminamos ya todo, lo que empezamos con el while.

Como pueden ver, la terminal es sin lugar a dudas un espacio maravilloso, si un comando no hace exactamente lo que queremos … podemos unir varios de ellos y lograr lo que deseamos. Vean cada comando como una herramienta, una herramienta (martillo) no puede hacernos una hermosa estatua, sin embargo, uniendo esta herramienta (martillo) con otras (madera y cincel) sí podemos llegar al resultado soñado 🙂

Ah, por cierto… si desean que esto les aparezca siempre en la terminal sin necesidad de ejecutarlo cada vez que abran una consola, lo deben poner en .bashrc, o sea:

echo "while sleep 1;do tput sc;tput cup 0 \$((\$(tput cols)-29));date;tput rc;done &" >> $HOME/.bashrc

Luego si desean quitarlo, ejecuten lo siguiente:

sed -i "s/while sleep 1/#while sleep 1/" $HOME/.bashrc

Bueno nada más que agregar, espero les haya sido de utilidad

Saludos

strong

echo “while sleep 1;do tput sc;tput cup 0 \$((\$(tput cols)-29));date;tput rc;done &” >> $HOME/.bashrc

Comparte para difundir

Si te ha gustado nuestro contenido ahora puedes ayudar a difundirlo en las redes sociales de manera sencilla usando los siguientes botones:

Envía
Pinea
Print

21 comentarios

  1.   Gonzalo dijo

    Muy interesante!

    1.    KZKG^Gaara dijo

      Gracias por leernos 🙂

  2.   Ghermain dijo

    Gracias pero no me funciona… Ni en Konsole ni en Yakuake hice todo tal cual está en el post. 🙁

    1.    Ghermain dijo

      Perdón… fue mi culpa… ahora que reinicié FUNCIONA!!!

      1.    KZKG^Gaara dijo

        Ya me resultaba raro que no funcionara, pues while … date y tput son comandos del paquete Bash 😀

  3.   jota eme dijo

    Ya hace tiempo que ando buscando maneras de “decorar” la eficaz pero fría terminal, y este comando es muy bueno, no tan barroco como otras soluciones, pero cuando introduzco un comando largo hay cierta confusión. El comando se come la fecha y luego la fecha parece comerse el comando. ¿Alguien sabe si hay algún modo de que el prompt aparezca por defecto una línea más abajo?
    De todos modos, ¡gracias!

  4.   Gregorio Espadas dijo

    Excelente tip 🙂

    1.    KZKG^Gaara dijo

      Thanks bro 😀

  5.   Ghermain dijo

    No se… algo raro pasó… coloque en una terminal:

    echo “while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &” >> $HOME/.bashrc

    Y el resultado fue:

    bash: /home/ghermain/.bashrc: línea 115: error sintáctico cerca del elemento inesperado `do’
    bash: /home/ghermain/.bashrc: línea 115: `PS1=’${debian_chroot:+($debian_chroot)}\[33[01;34m\]\u\[33[01;32m\]@\[33[01;32m\]\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ ‘while sleep 1;do tput sc;tput cup 0 64;date;tput rc;done &’

    Luego directamente copié en el .bashrc al final los comandos que das y me salen varias lineas con la fecha y hora.

    1.    O_Pixote_O dijo

      Borra todas las lineas que has puesto en el archivo .bashrc sobre la fecha y vuelve a poner manualmente la linia sin utilizar el echo que si no da error

  6.   Oscar dijo

    Gracias por el tip amigo, funciona correctamente. Saludos.

    1.    KZKG^Gaara dijo

      Gracias a tí por leernos 🙂

  7.   truko22 dijo

    Genial 😀
    O se puede crear un alias y usarlo cuando se necesite 😀

  8.   James_Che dijo

    Interesante, lo probaré más tarde

  9.   Juan dijo

    Muy bueno

  10.   jamin-samuel dijo

    podrias hacer un post explicando como instalar zsh en Debian/Ubuntu/Mint/Elementary y como configurarle temas ??

    1.    KZKG^Gaara dijo

      Uff, nunca he usado zsh, lo siento 🙁

  11.   O_Pixote_O dijo

    KZKG^Gaara cuando haces el comando da error porque supongo que intenta reconocer los $ que no tienen valor, para que no los interprete, poniendoles \ se arregla.

    echo "while sleep 1;do tput sc;tput cup 0 \$((\$(tput cols)-29));date;tput rc;done &" >> $HOME/.bashrc

    Supongo que asi no habra ningun problema, rectificalo antes de que le de a alguien error. Buen post, lo voy utilizar. Saludos.

    1.    KZKG^Gaara dijo

      Uff cierto, error mío 😀
      Ya lo arreglo en el post, muchísimas gracias por la corrección 🙂

  12.   jvk85321 dijo

    Yo lo modifique y lo deje asi

    while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-16));date +”%R %d/%m/%Y”;tput rc;done &

    Solo muestra Hora:Minutos Fecha con formato DD/MM/YYYY

  13.   danyel dijo

    exelente amigo me funciono al 100 gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.