在bash脚本中,“:exit 0”是什么意思?

时间:2019-12-12 02:55:10

标签: bash shell

我在某些bash脚本中发现,通常在文件末尾,只有一行代码,如下所示:

: exit 0

这是什么意思?我可以直接将其删除吗?

1 个答案:

答案 0 :(得分:3)

内置:的{​​{1}}基本上是一个命令,在shell (a)扩展了其所有参数之后,该命令返回零(成功)。在这种情况下,扩展实际上不执行任何操作,因此实际上是空操作。我怀疑它只是用来指示: (b)效果

:的效果与bash脚本返回的内容有关。它们基本上返回脚本中运行的最后一个命令的退出状态。因此,:将强制整个脚本的退出状态为不管命令返回之前的状态是什么。

您可以使用以下脚本查看效果:

ls /tmp/nosuchfile 2> /dev/null

如果运行后跟echo $?的代码,则会看到错误代码:

pax> ./script.sh ; echo $?
2

如果您随后将脚本更改为:

ls /tmp/nosuchfile 2> /dev/null
: some arbitrary text

然后您将从脚本中看到成功代码:

pax> ./script.sh ; echo $?
0

(a)我经常将其用于无限循环,例如:

while : ; do somePeriodicThing ; sleep 60 ; done

(b)当然,它与exit 0并不完全相同,因为exit将退出您当前的shell,这将以不同的方式进行取决于您是运行还是来源:

./script.sh    # runs it, exit will exit that script.
. ./script.sh  # sources it, exit will exit your shell.

在这两种情况下,:都不会退出您当前的shell。