回答
while true; do foo; sleep 2; done
顺便说一句,如果你键入它作为一个多(因为你是显示)在命令提示符下然后用箭头向上调用历史记录,你会在一行中得到它,正确地加上标点符号。
$ while true
> do
> echo "hello"
> sleep 2
> done
hello
hello
hello
^C
$ <arrow up> while true; do echo "hello"; sleep 2; done
+1。这是一个很棒的助记符:“如果您在命令提示符下键入多行(如您所示),然后使用箭头调用历史记录,则”true * do * foo * sleep * too * la di da“:D – Shabbyrobe 2011-12-10 06:55:37
你可以在一条线上得到它,正确地打断它。“对我来说并非如此。 – 2013-01-09 21:35:09
@VincentScheib,如果你使用bash,请检查'cmdhist'选项? – 2013-03-05 18:56:30
您可以用分号来分隔语句:
$ while [ 1 ]; do foo; sleep 2; done
我喜欢这个答案,因为它解释了何时和为什么; (分号)是必需的。 – 2017-05-19 10:29:55
我喜欢用分号只为WHILE语句, 和& &操作,使循环做多件事情。 ..
所以我一直做这样的
while true ; do echo Launching Spaceship into orbit && sleep 5s && /usr/bin/launch-mechanism && echo Launching in T-5 && sleep 1s && echo T-4 && sleep 1s && echo T-3 && sleep 1s && echo T-2 && sleep 1s && echo T-1 && sleep 1s && echo liftoff ; done
那么,在循环中使用'&&'和其他时间是一样的。你是否需要第二件事情发生,只有当第一件事情发生时,然后使用'&&'else';'就足够了。真的,你想保持这个循环的内容简短,理想情况下只有一个命令,所以一个函数或脚本。 – thecoshman 2015-07-07 13:03:02
如果我可以举两个实例(带点“情感”)。
这会将所有文件的名称与文件夹 “IMG”, “.JPG” 结束:
for f in *; do if [ "${f#*.}" == 'jpg' ]; then echo $f; fi; done
这将删除他们:
for f in *; do if [ "${f#*.}" == 'jpg' ]; then rm -r $f; fi; done
只是想做出贡献。
它也可能在同时的条件使用睡眠命令。让单线看起来更清洁imho。
while sleep 2; do echo thinking; done
相关提示 – 2013-01-25 03:08:05
这不仅仅是改变语法 - 它会在睡眠之后执行命令*。在之前的回答中,该命令立即执行。只需注意一点。 – DanGordon 2016-10-26 16:29:11
您还可以使用until
命令:
until ((0)); do foo; sleep 2; done
注意的是,与while
,until
将执行中的命令只要测试条件具有非零的退出状态,该循环就可以。
使用while
循环:
while read i; do foo; sleep 2; done < /dev/urandom
使用for
循环:
for ((;;)); do foo; sleep 2; done
使用until
另一种方式:
until [ ]; do foo; sleep 2; done
+1可供选择的解决方案。 – glen3b 2013-09-29 01:33:17
一个很简单的无限循环..:)
while true ; do continue ; done
神父您的问题将是:
while true; do foo ; sleep 2 ; done
对于简单的过程看使用watch
代替
你可以试试这个太 警告:这你不应该做的,但由于问题是要求无限循环,没有结束......这是你如何做到的。
while [[ 0 -ne 1 ]]; do echo "it's looping"; sleep 2; done
你为什么要这么做? – 2017-02-07 21:02:40
,因为发布该问题的Brian Deacon想要一个无限循环。这不只是一种方法去皮肤猫,这是所有 – 2017-02-07 21:51:50
如果你想while循环一定条件后停止,您foo
命令返回非零时,这个条件满足,那么你可以得到循环来打破这样的:
while foo; do echo 'sleeping...'; sleep 5; done;
例如,如果foo
命令正在批量删除事物,并且在没有剩下任何要删除的情况下它将返回1。
如果您有一个自定义脚本,需要多次运行命令,直到出现某种情况,这种方式才能正常工作。当条件满足时,编写脚本以1
退出,并在应该再次运行时以0
退出。
例如,假设你有一个python脚本batch_update.py
其数据库中的更新100行并返回0
如果有更多的更新和1
如果没有更多的。以下命令将允许您在更新之间一次更新100行,并保持5秒钟的更新:
while batch_update.py; do echo 'sleeping...'; sleep 5; done;
和你将如何退出? – 2018-01-17 22:45:39
当您希望while循环中断时,您可以使用代码'1'使'foo'命令退出。我用一个例子更新了我的答案。 – 2018-01-18 02:31:20
- 1. 猛砸while循环与读取和IFS
- 2. 猛砸while循环,通过线读取文件中的行
- 3. while while循环无限
- 4. 无限while循环
- 5. 无限while循环
- 6. 无限'while'循环
- 7. 猛砸while循环等待,直到任务完成
- 8. 猛砸语法错误:行7:文件
- 9. 猛砸在Oracle SQL循环逻辑
- 10. 猛砸取代LS与循环
- 11. 猛砸for循环上的目录
- 12. Treetop语法无限循环
- 13. 猛砸if语句语法错误
- 14. while循环在masm32无限循环
- 15. 的Javascript while循环无限循环
- 16. while循环python导致无限循环
- 17. While循环内无限循环Java Selenium
- 18. while(1)循环无限循环的TAC
- 19. Python中无限循环while循环
- 20. 无限while循环蟒蛇
- 21. 无限while循环Python
- 22. 无限循环in while
- 23. 结束无限while循环
- 24. 无限while循环在C
- 25. Java的无限While循环
- 26. 无限循环while read stdio.h
- 27. 无限while循环C++
- 28. while循环无限循环,如果它达到elif语句
- 29. 猛砸环通文件无法正常运行
- 30. 猛砸单引号
用分号替换换行符。 for循环的作用相同。 – Tom 2009-08-17 16:34:06
@Tom:这并不总是奏效。在做之后,你必须有第一个命令,而不是用分米和韵的分号 – 2009-08-17 16:38:22