我有一个小shell脚本,它运行指定目录中的任何可执行文件,同时传递两个参数:
#!/bin/sh
cd '/foo'
for s in bar/*;
do [ -x $s ] && $s "$1" "$2" || : ;
done
|| :
比特是否有任何用途?我希望可执行文件异步启动,所以我将;
更改为&
,但有什么原因不应该这样做吗:
#!/bin/sh
cd '/foo'
for s in bar/*;
do [ -x $s ] && $s "$1" "$2" &
done
|| :
(通常拼写为|| true
)表示您不在乎命令是否成功。它强制返回成功状态($?
)。
最好在shell的-e
选项下运行shell脚本,这样错误就不会被忽视。此选项可以在shebang行(#!/bin/sh -e
)上激活,也可以在脚本本身(set -e
)中激活。它会导致错误中止脚本的执行。
由于在这种情况下,您不是在-e
下运行,因此|| :
不会产生任何不同,因为如果命令失败,shell无论如何都会忽略结果代码。此外,在这种情况下,您在后台运行一个命令,因此检查返回代码甚至没有意义。
一般来说,包括|| true
(即使您不是在-e
下运行)可能是好的,原因有两个:
- 使其与
-e
兼容,以防更改为在-e
下运行 - 作为阅读shell脚本的人的文档,你意识到这个命令可能会失败,而且这种失败显然是可以的