在 Bash 中,命令完成后不断重新执行

在 Bash 中,命令完成后不断重新执行

我正在尝试找出一种简单的方法,无论出于什么原因(错误或其他原因),只要命令完成,就继续重新执行。

解决这个问题的最佳方法是什么?

编辑:我之前说得不够清楚。我需要下一次执行等待直到前一个结束。

编辑2:几乎所有答案都很好用。我错误地认为大多数答案要么分叉进程,要么只重新执行一次,而这两种情况都是不想要的。

答案1

这会形成一个无限循环,command一遍又一遍地执行。

while :
do
    command
done

答案2

watch命令将按照指定的间隔永远重复执行命令:

watch -n0 <command>

设置-n为零实际上会使间隔为零(我认为它实际上是 0.1 秒)。

watch还具有对齐输出的额外好处,以便可以轻松看到视觉变化,并具有一个开关来突出显示上次运行以来的变化。

参考:watch 手册页

watch 重复运行命令,显示其输出(第一个屏幕)。这允许您观察程序输出随时间的变化。默认情况下,程序每 2 秒运行一次;使用 -n 或 --interval 指定不同的间隔。

监视将一直运行直至被中断。

答案3

一个简单的解决方案是:

yourcommand; !#

;分隔命令,允许一行中输入多个命令(Bash:列表

!#告诉 bash“重复我迄今为止在这一行中写过的所有内容”(Bash:事件指示器

答案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 脚本中很有用。

相关内容