我在bash的变量中有一个命令:
check_ifrunning =`ps aux | grep“programmname”| grep -v“grep”| wc -l`
如果特定程序正在运行,该命令将检查。 稍后在我的脚本中,我想查询一个点上变量的值。 如果特定程序正在运行,则脚本应该休眠15分钟。 我这样解决了:
而[$ check_ifrunning -eq 1];做什么 睡300儿 DONE 的
现在我的问题是:
脚本是否会在每个循环运行的变量中执行命令,还是第一次执行后变量中的值会保留?
我的脚本中有更多变量可以改变它们的值,这只是一个简单的例子。
提前感谢您的帮助。
最好的问候。
答案 0 :(得分:1)
请注意,check_ifrunning
仅在
check_ifrunning=`ps aux | grep "programmname" | grep -v "grep" | wc -l`
并且在循环之前设置:
while [ $check_ifrunning -eq 1 ]; do
sleep 300
done
出于调试目的,您可以在echo check_ifrunning is $check_ifrunning
之前的while
循环内添加sleep
语句...
你可能只想要(使用pidof(8)) - ,不用定义或使用任何check_ifrunning
bash 变量
while [ -n "$(pidof programname)" ]; do
sleep 300
done
因为您想测试每次循环开始时programname
是否正在运行!
您应该使用更可嵌套且更具可读性的$(
... )
而不是反引号。
考虑阅读Advanced Bash Scripting Guide ....
如果您正在编写bash
脚本,请考虑使用
#!/bin/bash -vx
调试时如果您满意,请删除-vx
....
答案 1 :(得分:1)
如果要封装命令,正确的方法是使用函数。
running () {
ps aux | grep "$1" | grep -q -v grep
}
使用grep -q
,您将获得结果作为退出代码,而不是输出;你就像
if running "$programname"; then
:
理想情况下,第二个grep
是不必要的,但我不想过多地使代码复杂化。如果您正在寻找grep
,它仍然无法正常工作。正确的解决方案是pidof
。