我正在尝试确定我的bash脚本的另一个实例是否正在运行,并等到这个实例是唯一的实例,然后继续其他的东西。
我尝试了以下内容:
#!/bin/bash
while [[ $(ps aux | grep $0 | wc -l) > 2 ]]; do
echo another instance already running, waiting.
# Next line is for debugging:
ps aux | grep $0 | wc -l
sleep 1
done
echo I am now the only instance, ready to proceed
# do stuff
我也尝试了`expr $(ps aux | grep $0 | wc -l)`
。
即使while
循环中的命令输出为while
,这两个循环都会进入2
循环(这是我在运行一个实例时所期望的输出,因为{{1}也计算ps aux
。
我在这里做错了什么?关于如何处理此问题的任何其他建议?
额外评论:我知道为了使其能够正常工作,如果我检测到两个以上正在运行的实例,我将不得不结束脚本,否则他们可能会永远陷入grep
循环。一旦我正确地运行循环,我将在循环之前添加它。
此外,我将确保脚本按其完整路径运行,因此使用while
不会导致混淆。