不知不觉中在终端上运行了无限循环


9

我将以下代码从某些随机源复制到终端并运行:

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

该代码将在终端的右上角显示运行时钟。该代码片段运行得很好,并且完全按照我想要的去做,但是现在我只想结束此循环并摆脱时钟。

另外,我需要了解上面的代码。我有个主意,因为我知道tput命令的作用,但是仍然有很多点无法连接。


1
您可以jobs在会话中运行以列出活动的后台作业,然后通过键入将其置于前台fg <job number>。在按Ctrl + C后停止此无限循环。此方案仅在运行代码段的终端中有效。
Yurij Goncharuk '19

非常感谢您,这是摆脱循环的一种非常干净的方法。这应该成为公认的答案。
Kartik Chauhan

别客气!我把它作为回答。
Yurij Goncharuk '19

1
请注意,仅关闭终端窗口也将终止与之连接的所有正在运行的作业。
tlkly

您在这里有两个问题。您能否将第二个拆分为一个新问题。
ctrl-alt-delor

Answers:


15

您可以jobs在会话中运行命令以列出活动的后台作业,然后通过键入将其置于前台fg <job number>。然后键入Ctrl+ C停止此无限循环。

此方案仅在运行代码段的终端中有效。


说明:

tput sc -保存光标位置。

tput cup 0 $(($(tput cols)-29))-将光标移动到0Y轴和(count of screen columns minus 29)X轴的位置。

date -仅打印当前日期。

tput rc -恢复光标位置。

while sleep 1; ... do ... ; done -延迟1秒循环。

键入help while以了解有关whileShell中循环的更多信息,并遵循man 1 tputtldp tput doc来了解tput的工作方式。


我仍然想知道代码是如何做的。
Kartik Chauhan

@KartikChauhan我也做了一些解释。
Yurij Goncharuk '19

@KartikChauhan你是对的!谢谢!我已经解决了这个问题。
Yurij Goncharuk '19

3
kill %1(如果有多个职位,则为不同的数字)是fg+ 的替代选择Ctrl-C
Roman Odaisky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.