I wanted to make my shell script wait infinitely
If your system supports it use:
sleep infinity
If your system doesn't support it, use sleep
with a large interval:
while :; do sleep 86400; done
Note:
- Using
while :
in place of while true
may/will remove an unnecessary fork
, depending on how true
is implemented (built into the shell, or as a stand alone application).
You are trying to implement a busy loop, do not do this.
A busy loop will:
- Use 100% CPU for no useful purpose
- Prevent other tasks from getting CPU time
- Reduce the perceived performance of the whole system
- Use more power than necessary, especially so on systems that support dynamic frequency scaling
Why is an empty loop invalid in shell script?
Because it is... The format for a while
loop in bash
is as follows:
while list-1; do list-2; done
If you don't provide list-2
, then you don't have a correctly formatted while
loop.
As pointed out by others, use a noop (:
) or anything else to satisfy list-2
.
:
is documented as follows:
: [arguments]
No effect; the command does nothing beyond expanding arguments and performing any
specified redirections. A zero exit code is returned.