Inconsapevolmente ha eseguito un ciclo infinito nel terminale


9

Ho copiato il codice seguente da una fonte casuale al mio terminale e ho eseguito:

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

Il codice è mostrare un orologio in esecuzione nell'angolo in alto a destra del terminale. Lo snippet ha funzionato molto bene e ha fatto esattamente quello che volevo, ma ora voglio solo terminare questo loop e sbarazzarmi del tempo.

Inoltre, ho bisogno di capire il codice sopra. Ho qualche idea, poiché so che cosa tputfa il comando, ma ci sono ancora molti punti che non sono in grado di connettere.


1
È possibile eseguire jobsnella sessione per elencare i processi in background attivi e metterlo in primo piano digitando fg <job number>. Dopo aver digitato Ctrl + C per interrompere questo ciclo infinito. Questo scenario funziona solo nel terminale che esegue lo snippet.
Yurij Goncharuk,

Grazie mille, un modo molto pulito di sbarazzarsi del ciclo. Questa dovrebbe diventare la risposta accettata.
Kartik Chauhan,

Prego! L'ho messo come risposta qui sotto.
Yurij Goncharuk,

1
Notare che la semplice chiusura della finestra del terminale termina anche tutti i lavori in esecuzione ad esso collegati.
truscamente

Hai due domande qui. Puoi dividere il 2 ° in una nuova domanda.
ctrl-alt-delor

Risposte:


15

È possibile eseguire il jobscomando nella sessione per elencare i processi in background attivi e quindi metterli in primo piano digitando fg <job number>. Quindi digitare Ctrl+ Cper interrompere questo ciclo infinito.

Questo scenario funziona solo nel terminale che esegue lo snippet.


Spiegazione:

tput sc - salva la posizione del cursore.

tput cup 0 $(($(tput cols)-29))- sposta il cursore sulla posizione 0dell'asse Y e (count of screen columns minus 29)dell'asse X.

date - basta stampare la data corrente.

tput rc - ripristina la posizione del cursore.

while sleep 1; ... do ... ; done - loop con ritardo di 1 secondo.

Digita help whileper saperne di più su whileloop in shell e segui man 1 tput o tldp tput doc per sapere come funziona tput.


Vorrei ancora sapere come ha fatto il codice a fare quello che ha fatto.
Kartik Chauhan,

@KartikChauhan Ho messo anche qualche spiegazione.
Yurij Goncharuk,

@KartikChauhan Hai ragione! Grazie! Ho appena risolto questo problema.
Yurij Goncharuk,

3
kill %1(o un numero diverso se ci sono più lavori) è un'alternativa a fg+Ctrl-C
Roman Odaisky
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.