Sin saberlo, ejecutó un bucle infinito en la terminal


9

Copié el código a continuación de alguna fuente aleatoria en mi terminal y ejecuté:

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

El código es para mostrar un reloj en ejecución en la esquina superior derecha de la terminal. El fragmento funcionó muy bien e hizo exactamente lo que quería, pero ahora solo quiero terminar este ciclo y deshacerme del reloj.

Además, necesito entender el código anterior. Tengo una idea, ya que sé qué tputcomando hace, pero todavía hay muchos puntos que no puedo conectar.


1
Puede ejecutar jobssu sesión para enumerar trabajos en segundo plano activos y luego ponerla en primer plano escribiendo fg <job number>. Después de escribir Ctrl + C para detener este bucle infinito. Este escenario solo funciona en terminales que ejecutan fragmentos.
— Yurij Goncharuk

Muchas gracias, una forma muy limpia de deshacerse del bucle. Esto debería convertirse en la respuesta aceptada.
— Kartik Chauhan

¡De nada! Lo pongo como respuesta a continuación.
— Yurij Goncharuk

1
Tenga en cuenta que simplemente al cerrar la ventana del terminal también finalizará todos los trabajos en ejecución adjuntos.
— Trlyly

Tienes dos preguntas aquí. ¿Puedes dividir el segundo, a una nueva pregunta?
— ctrl-alt-delor

Respuestas:


15

Puede ejecutar jobscomandos en su sesión para enumerar trabajos en segundo plano activos y luego ponerlos en primer plano escribiendo fg <job number>. Luego escriba Ctrl+ Cpara detener este bucle infinito.

Este escenario solo funciona en terminales que ejecutan fragmentos.


Explicación:

tput sc - Guardar la posición del cursor.

tput cup 0 $(($(tput cols)-29))- mueva el cursor a la posición 0del eje Y y (count of screen columns minus 29)del eje X.

date - solo imprima la fecha actual.

tput rc - Restaurar la posición del cursor.

while sleep 1; ... do ... ; done - bucle con retraso de 1 segundo.

Escriba help whilepara saber más sobre whileloop in shell y siga a man 1 tput o tldp tput doc para saber cómo funciona tput.


Todavía me gustaría saber cómo hizo el código lo que hizo.
— Kartik Chauhan

@KartikChauhan Puse alguna explicación también.
— Yurij Goncharuk

@KartikChauhan ¡Tienes razón! ¡Gracias! Acabo de arreglar esto.
— Yurij Goncharuk

3
kill %1(o un número diferente si hay varios trabajos) es una alternativa a fg+Ctrl-C
— Roman Odaisky
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.