Syntax for a single-line Bash infinite while loop
我很难找到分号和/或大括号的正确组合。我想这样做,但作为命令行中的一行程序:
1 2 3 4 5 | while [ 1 ] do foo sleep 2 done |
1 | while true; do foo; sleep 2; done |
顺便说一下,如果您在命令提示下键入多行(如您所示),然后用向上箭头调用历史记录,您将得到一行正确标点的历史记录。
1 2 3 4 5 6 7 8 9 10 | $ while true > do > echo"hello" > sleep 2 > done hello hello hello ^C $ while true; do echo"hello"; sleep 2; done |
在while的情况下也可以使用sleep命令。让一个内衬看起来更干净。
1 | while sleep 2; do echo thinking; done |
冒号总是"真的":
1 | while :; do foo; sleep 2; done |
您还可以使用
1 | until ((0)); do foo; sleep 2; done |
注意,与
使用
1 | while read i; do foo; sleep 2; done < /dev/urandom |
使用
1 | for ((;;)); do foo; sleep 2; done |
使用
1 | until [ ]; do foo; sleep 2; done |
可以使用分号分隔语句:
1 | $ while [ 1 ]; do foo; sleep 2; done |
一个非常简单的无限循环。:)
1 | while true ; do continue ; done |
你的问题是:
1 | while true; do foo ; sleep 2 ; done |
我只喜欢在while语句中使用分号,以及使循环执行多个操作的运算符…
所以我总是这样做
1 | 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 |
对于简单的过程监视,使用
如果您希望while循环在某个条件之后停止,并且您的
1 | while foo; do echo 'sleeping...'; sleep 5; done; |
例如,如果
如果有一个自定义脚本需要多次运行一个命令,直到出现某种情况,那么这个脚本就会很好地工作。当条件满足时,编写脚本退出
例如,假设您有一个python脚本
1 | while batch_update.py; do echo 'sleeping...'; sleep 5; done; |
你也可以试试这个警告:您不应该这样做,但由于问题是要求无限循环没有结束…这是您可以这样做。
1 | while [[ 0 -ne 1 ]]; do echo"it's looping"; sleep 2; done |
如果我能举两个实际的例子(带点"情感")。
这将在文件夹"img"中写入以".jpg"结尾的所有文件的名称:
1 | for f in *; do if ["${f#*.}" == 'jpg' ]; then echo $f; fi; done |
这将删除它们:
1 | for f in *; do if ["${f#*.}" == 'jpg' ]; then rm -r $f; fi; done |
只是想贡献自己。