![在 Bash 中,命令完成后不断重新执行](https://linux22.com/image/1296884/%E5%9C%A8%20Bash%20%E4%B8%AD%EF%BC%8C%E5%91%BD%E4%BB%A4%E5%AE%8C%E6%88%90%E5%90%8E%E4%B8%8D%E6%96%AD%E9%87%8D%E6%96%B0%E6%89%A7%E8%A1%8C.png)
我正在尝试找出一种简单的方法,无论出于什么原因(错误或其他原因),只要命令完成,就继续重新执行。
解决这个问题的最佳方法是什么?
编辑:我之前说得不够清楚。我需要下一次执行等待直到前一个结束。
编辑2:几乎所有答案都很好用。我错误地认为大多数答案要么分叉进程,要么只重新执行一次,而这两种情况都是不想要的。
答案1
这会形成一个无限循环,command
一遍又一遍地执行。
while :
do
command
done
答案2
该watch
命令将按照指定的间隔永远重复执行命令:
watch -n0 <command>
设置-n
为零实际上会使间隔为零(我认为它实际上是 0.1 秒)。
watch
还具有对齐输出的额外好处,以便可以轻松看到视觉变化,并具有一个开关来突出显示上次运行以来的变化。
watch 重复运行命令,显示其输出(第一个屏幕)。这允许您观察程序输出随时间的变化。默认情况下,程序每 2 秒运行一次;使用 -n 或 --interval 指定不同的间隔。
监视将一直运行直至被中断。
答案3
答案4
给while
循环一个布尔条件,如下所示:
#!/bin/bash
while true; do
do_something && wait
done
这会不断执行,直到 bash 收到终止进程的信号。通常采用 的形式ctrl+c
。
您还可以使用该watch
命令重复运行脚本。例如,在 bash 终端中使用一个简单的时钟watch
可能如下所示:
$ watch -t -n1 date +%T
该-t
选项指示watch
不显示正在运行的进程的标题。这样,您将获得仅重复的命令的干净输出。该-n1
选项指示 watch 每秒重复一次n
。在这种情况下,-n1
间隔为1
秒。然后,该date +%T
命令显示命令完成时的时间。执行此命令将在您的终端中为您提供活动时钟。
然后,其他任何答案中都没有的另一种方法是无限函数调用。
do_something() { do_something }; do_something && wait
while
这与仅使用递归函数调用的布尔循环本质上相同。
(编辑)为了考虑您机器的资源,我添加了这样&& wait
每次运行进程时,循环都会“等待”直到该进程以退出状态 0 结束,然后再进行下一次迭代。这在交互式 shell 脚本中很有用。