是的,示例脚本中确实存在竞争条件。您可以使用bash的
noclobber选项,以便在比赛
-f和其他测试脚本潜行时出现比赛失败
touch。
以下是一个示例代码片段(受本文启发),说明了该机制:
if (set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then # This will cause the lock-file to be deleted in case of a # premature exit. trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT # Critical Section: Here you'd place the pre/commands you want # to be protected (i.e., not run in multiple processes at once). rm -f "$lockfile" trap - INT TERM EXITelse echo "Failed to acquire lock-file: $lockfile." echo "Held by process $(cat $lockfile)."fi



