我在某些bash脚本中发现,通常在文件末尾,只有一行代码,如下所示:
: exit 0
这是什么意思?我可以直接将其删除吗?
答案 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。