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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.