我很难找到分号和/或大括号的正确组合。我想这样做,但作为命令行的一行代码:

while [ 1 ]
do
    foo
    sleep 2
done

当前回答

使用while:

while true; do echo 'while'; sleep 2s; done

用于循环:

for ((;;)); do echo 'forloop'; sleep 2; done

使用递归,(与上面有点不同,键盘中断不会停止它)

list(){ echo 'recursion'; sleep 2; list; } && list;

其他回答

如果您希望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;

非常简单的无限循环..:)

while true ; do continue ; done

你的问题是:

while true; do foo ; sleep 2 ; done

你也可以试试这个警告:您不应该这样做,但因为问题是要求无限循环没有结束。。。这就是你能做到的。

while [[ 0 -ne 1 ]]; do echo "it's looping";   sleep 2; done

您还可以将该循环置于后台(例如,当您需要断开与远程计算机的连接时)

nohup bash -c "while true; do aws s3 sync xml s3://bucket-name/xml --profile=s3-profile-name; sleep 3600; done &"
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