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.

Kartik Chauhan
fuente
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.

Yurij Goncharuk
fuente
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