帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何重复执行一个Linux命令,直到成功为止

如何重复执行一个Linux命令,直到成功为止

发布时间:2020年05月07日 09:30:51    来源: A5互联

如果你想在Linux系统服务器上运行一个命令,直到它成功,有一些非常简单的方法可以做到这一点,不需要你重复输入命令或坐在屏幕前按! (重复上一条命令),直到命令成功为止。在这篇文章中,我们将看看bash的两个选项。

1、使用 while !

首先,我们来看看一个简单的例子,试图显示一个文件的内容。这个技巧是使用bash的while命令来创建一个循环,但是在你要运行的命令前加上一个 !号,这样它就可以循环,直到命令成功为止。下面是它的工作原理。

$ while ! cat missingfile

! 作为一个 "不 "条件。把这一行读成 "虽然不能显示指定的文件"。 如果文件确实丢失了,或者由于某种原因,你没有读取文件的权限,那么显示 "missingfile" 的内容的尝试就会失败。然而,为了完成while命令,你需要指定文件不可用时应该发生的事情。所以,我们在这里增加了一些行来充实while命令。

$ while ! cat missingfile

do

echo waiting for missingfile

sleep 10

done

一旦某个人或进程把missicefile丢到了, cat missfile命令应该会成功(假设你有权限查看),while命令会在下一次检查时退出。睡眠命令可以确保你不会每隔一秒钟就尝试很多次,迅速让你的屏幕上充满了 "waiting for missicefile "的消息。你检查的频率应该取决于你是想在文件可用的时候就看到它,还是要等待一段时间--在这种情况下,最多10秒。

echo命令真的不需要,除非你想被提醒你在等待文件可用的时候,否则就不需要。

一旦文件可用,while命令就会退出,你就可以进入下一步--可能是以某种方式使用该文件,或者在确定文件可用后再转到其他任务上。

你也可以在运行脚本时使用这种方法。在这个命令中,我们每隔10秒尝试一次while命令,等待runme脚本运行成功。

$ while ! ./runme

do

sleep 10

done

注意,"while ! ./runme "命令相当于指定了 "当脚本运行失败时"。

2、使用until

你也可以使用 "until "命令来完成同样的事情。你可以使用 "直到它是 "逻辑来代替 "while not "逻辑。这些命令的工作原理与上图中的相同。

$ until cat missingfile

do

echo waiting for missingfile

sleep 10

done


$ until ./runme

do

sleep 10

done

一旦出现missingfile或runme脚本成功运行,循环将退出。

3、脚本中的循环

你也可以使用while ! 或 until命令来反复尝试运行脚本中的一些命令。如果你有一个依赖其他文件运行的脚本,你可以这样做。

#!/bin/bash


until ls myscript 2>/dev/null

echo waiting

sleep 10

done

./myscript

脚本将继续尝试,直到它能运行指定的脚本。

注意,这个脚本会显示出它正在等待myscript出现的消息,但它会将测试中的错误输出发送到/dev/null(又名 "bit bucket"),以防止脚本显示错误,表明有什么东西坏了。一旦myscript可用,循环退出,脚本就会运行。

当然,你可能根本不想看到 "等待 "的信息填满你的屏幕。你可以完全省略回声命令,尤其是当你确信脚本最终会被运行,并且在完成后会收到通知。