Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash if语句只证明一次为真_Bash_If Statement - Fatal编程技术网

Bash if语句只证明一次为真

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

首先,如果问题比较宽泛,我表示歉意。也许有人可以相应地重新定义它

我写了下面的脚本来详细说明我的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脚本输出:

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