我是bash脚本的新手,我一直在学习,因为我正在学习一个小项目。但是,我遇到了一个我似乎无法过去的问题。
我有一个我需要包含在命令中的变量。直接在shell中运行时(手动键入变量),该命令将返回预期结果。但是,在使用变量时,我无法使其工作。
所以,如果我手动运行它,它会正确返回0或1,具体取决于它是否正在运行。
ps -ef | grep -v grep | grep -c ProcessName
但是,当我尝试将其嵌入此while子句时,它总是计算为0,因为它没有搜索正确的文本。
while [ `ps -ef | grep -v grep | grep -c {$1}` -ne 0 ]
do
sleep 5
done
有没有办法可以做到这一点?我尝试过无数种不同的事情无济于事。我也尝试使用 $()语法进行命令替换,但我也没有运气。
谢谢!
答案 0 :(得分:3)
我认为{$1}
代替"$1"
而不是pgrep -c "$1"
。此外,您只需执行grep -c
而不是两个管道。
此外,也无需将0
的输出与while pgrep "$1" > /dev/null
do
sleep 4
done
进行比较,因为您可以查看命令是否失败。因此,更简化的版本可能是:
{{1}}
答案 1 :(得分:1)
如果您使用完整的进程名称,那么您应该将-C
与ps
一起使用,而不是使用凌乱的管道。如果你对子串匹配感兴趣,那么你的方式是我唯一能想到的。