我有一个小的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
答案 0 :(得分:6)
|| :
(通常拼写为|| true
)表示您不关心命令是否成功。它强制成功返回状态($?
)。
最好在shell的-e
选项下运行shell脚本,这样就不会忽视错误。可以在shebang行(#!/bin/sh -e
)或脚本本身(set -e
)上激活此选项。它会导致错误中止脚本的执行。
由于在这种情况下您没有在-e
下运行,|| :
没有区别,因为如果命令失败,shell将无视结果代码。此外,在这种情况下,您在后台运行命令,因此检查返回代码甚至没有意义。
一般情况下,即使您未在|| true
下运行,包括-e
也可能有两个原因:
-e
兼容,以防它被更改为在-e
下运行。