我有一个小的 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 脚本的人提供文档,表明您意识到此命令可能会失败并且这种失败是明确的。
关于bash - 这些 shell 脚本字符 ( || : ) doing anything useful?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13538611/