Bash if语句只证明一次为真
首先,如果问题比较宽泛,我表示歉意。也许有人可以相应地重新定义它 我写了下面的脚本来详细说明我的bash技能,但是if语句只有在我手动启动python脚本时才被证明是正确的,它的目的是“监视” 如果我手动运行./deamon.py,然后手动运行./run_deamon.sh,bash脚本会回显“Python deamon.py running…”。然后,我可以继续终止deamon.py进程,我的bash脚本响应“Starting Python deamon.py…”。bash脚本启动deamon.py后,它不再响应“Python deamon.py running…”有人能解释我做错了什么吗 我希望bash脚本输出:Bash if语句只证明一次为真,bash,if-statement,Bash,If Statement,首先,如果问题比较宽泛,我表示歉意。也许有人可以相应地重新定义它 我写了下面的脚本来详细说明我的bash技能,但是if语句只有在我手动启动python脚本时才被证明是正确的,它的目的是“监视” 如果我手动运行./deamon.py,然后手动运行./run_deamon.sh,bash脚本会回显“Python deamon.py running…”。然后,我可以继续终止deamon.py进程,我的bash脚本响应“Starting Python deamon.py…”。bash脚本启动deamon
Python deamon.py running...
Python deamon.py running...
Python deamon.py running... (I now kill deamon.py)
Starting Python deamon.py...
Python deamon.py running...
Python deamon.py running...
等等
我尝试了以下方法:
while true; do
if [[ $(ps ax | grep 'deamon.py$') ]]; then
echo Python deamon.py running...;
else
echo Starting Python deamon.py...;
/home/bang/Documents/Python/./deamon.py;
fi
sleep 1
done
及
同样的行为
如果有人能给我指出正确的方向,我将不胜感激
编辑#1
我曾经
if [[ $(ps ax | grep 'deamon.py$' | grep -v grep) ]]; then
及
同样的结果。我在python脚本中添加了一个print语句,现在bash脚本正在响应print语句:
23
24
25
Starting Python deamon.py...
0
1
2
3
这是我的python脚本:
from time import sleep
x = 0
while True:
print(x)
if x == 25:
exit(0)
x += 1
sleep(1)
将grep从grep中排除 当您运行
ps ax | grep'deamon.py$'
时,deamon.py$
将出现在ps列表中。您得到了一个误报:守护进程可能没有运行,但您永远不会知道,因为您将始终与grep匹配
蛮力方法是将shell命令更改为
ps ax | grep 'deamon.py$' | grep -v grep
将grep从grep中排除 当您运行
ps ax | grep'deamon.py$'
时,deamon.py$
将出现在ps列表中。您得到了一个误报:守护进程可能没有运行,但您永远不会知道,因为您将始终与grep匹配
蛮力方法是将shell命令更改为
ps ax | grep 'deamon.py$' | grep -v grep
您需要在后台运行
deamon.py
进程,并将控件返回到脚本,如:
/home/bang/Documents/Python//deamon.py&代码>
否则,脚本将等待deamon.py
完成后再继续。您需要在后台运行deamon.py
过程,并将控制权返回到脚本,如:
/home/bang/Documents/Python//deamon.py&代码>
否则,脚本将等待deamon.py
完成后再继续。或使用pgrep
,因为它是为这种事情编写的。@Paul Hicks同样的结果。我在我的评论中添加了一个编辑。我尝试了|grep-vgrep
和pgrep
,如果您得到“grep deamon.py$”,grep不会匹配这一点,因为正则表达式中的$
表示“行尾”,而ps
输出中的$
表示.py
不在行尾。或者使用pgrep
,因为它是为这类事情编写的。@Paul Hicks同样的结果。我在我的评论中添加了一个编辑。我尝试了|grep-v grep
和pgrep
如果你得到了“grep deamon.py$”,这两种方法都不会被grep匹配,因为正则表达式中的$
表示“行尾”,而ps
的输出中的$
表示.py
不在行尾。请注意,“daemon”拼写为“ae”,不是“ea”。请注意,“daemon”拼写为“ae”,不是“ea”。是的,这就是问题所在!这起作用了。然而,行末尾的分号给了我一个语法错误。如果没有分号,效果会很好。非常感谢-这就是问题所在!这起作用了。然而,行末尾的分号给了我一个语法错误。如果没有分号,效果会很好。非常感谢你
from time import sleep
x = 0
while True:
print(x)
if x == 25:
exit(0)
x += 1
sleep(1)
ps ax | grep 'deamon.py$' | grep -v grep