Sem saber, executou um loop infinito no terminal

9

Copiei o código abaixo de alguma fonte aleatória para o meu terminal e executei:

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

O código é mostrar um relógio de corrida no canto superior direito do terminal. O snippet funcionou muito bem e fez exatamente o que eu queria, mas agora eu só quero terminar esse loop e me livrar do relógio.

Além disso, preciso entender o código acima. Eu tenho uma idéia, como eu sei o que o tputcomando faz, mas ainda há muitos pontos que não consigo conectar.

Kartik Chauhan
fonte
1
Você pode executar jobsem sua sessão para listar trabalhos ativos em segundo plano e colocá-los em primeiro plano digitando fg <job number>. Após digitar Ctrl + C para interromper esse loop infinito. Este cenário está funcionando apenas no terminal que executa o snippet.
Yurij Goncharuk 30/04/19
Muito obrigado, uma maneira muito limpa de se livrar do loop. Essa deve se tornar a resposta aceita.
Kartik Chauhan
Você é bem vindo! Coloquei como resposta abaixo.
Yurij Goncharuk
1
Observe que simplesmente fechar a janela do terminal também encerrará todos os trabalhos em execução anexados a ela.
trlkly
Você tem duas perguntas aqui. Você pode dividir o segundo, para uma nova pergunta.
Ctrl-alt-delor

Respostas:

15

Você pode executar o jobscomando em sua sessão para listar trabalhos em segundo plano ativos e colocá-los em primeiro plano digitando fg <job number>. Em seguida, digite Ctrl+ Cpara interromper esse loop infinito.

Este cenário está funcionando apenas no terminal que executa o snippet.


Explicação:

tput sc - salve a posição do cursor.

tput cup 0 $(($(tput cols)-29))- mova o cursor para a posição 0do eixo Y e (count of screen columns minus 29)do eixo X.

date - apenas imprima a data atual.

tput rc - restaura a posição do cursor.

while sleep 1; ... do ... ; done - loop com atraso de 1 segundo.

Digite help whilepara saber mais sobre o whileloop no shell e siga para man 1 tput ou tldp tput doc para saber como funciona a tput.

Yurij Goncharuk
fonte
Eu ainda gostaria de saber como o código fez o que fez.
Kartik Chauhan
@KartikChauhan Eu também coloquei algumas explicações.
Yurij Goncharuk
@KartikChauhan Você está certo! Obrigado! Eu apenas consertei isso.
Yurij Goncharuk
3
kill %1(ou um número diferente, se houver vários trabalhos) é uma alternativa a fg+Ctrl-C
Roman Odaisky