我想让shell脚本无止境地等待,并认为下面的代码可以做到这一点。
#!/bin/bash
while true
do
done但是,上面的脚本报告语法错误。
./InfiniteLoop.sh:第4行:未预料到的令牌
done' ./Infinite\_Loop.sh: line 4:完成时的语法错误
与编程语言不同的是,为什么shell脚本希望循环中至少有一条语句?
发布于 2017-07-07 12:15:30
我想让我的shell脚本无限等待
如果您的系统支持它,请使用:
sleep infinity如果您的系统不支持它,请使用大间隔的sleep:
while :; do sleep 86400; done注意:
while :代替while true可能/将删除不必要的fork,这取决于true是如何实现的(构建在shell中,还是作为独立的应用程序)。您正在尝试实现一个繁忙的循环,不执行这个。
一个繁忙的循环将:
为什么shell脚本中的空循环无效?
因为它是..。while循环在bash中的格式如下:
while list-1; do list-2; done如果不提供list-2,那么就没有一个格式正确的while循环。
正如其他人所指出的,使用noop (:)或其他任何东西来满足list-2。
:记录如下:
: [arguments]
No effect; the command does nothing beyond expanding arguments and performing any
specified redirections. A zero exit code is returned.发布于 2017-07-07 12:15:10
另一种选择就是设置NOP(NOP),这基本上是什么都不做。
在bash中,NOP的等效值是:。
while true; do
:
done发布于 2017-07-07 12:40:40
这不是Bash语法的一部分。手册告诉我们:
while命令的语法是: 同时执行测试命令;执行后续命令;完成
实际上,如果您深入挖掘Bash源代码,您可以找到while loop
shell_command: ...
| WHILE compound_list DO compound_list DONE如果您检查[医]定义,可以看到它必须包含至少一个shell指令;它不能是空的。
没有理由写一个空(无限)循环,除非你想加热你的CPU和耗尽你的电池。这可能就是Bash不允许空循环的原因。
正如其他人所说的,您可以使用true或: (后者是前者的别名。):
while true; do true; done
while :; do :; donehttps://stackoverflow.com/questions/44970342
复制相似问题