用变量替换Bash命令

时间:2011-02-08 16:50:49

标签: linux bash variables

我是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

有没有办法可以做到这一点?我尝试过无数种不同的事情无济于事。我也尝试使用 $()语法进行命令替换,但我也没有运气。

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为{$1}代替"$1"而不是pgrep -c "$1"。此外,您只需执行grep -c而不是两个管道。

此外,也无需将0的输出与while pgrep "$1" > /dev/null do sleep 4 done 进行比较,因为您可以查看命令是否失败。因此,更简化的版本可能是:

{{1}}

答案 1 :(得分:1)

如果您使用完整的进程名称,那么您应该将-Cps一起使用,而不是使用凌乱的管道。如果你对子串匹配感兴趣,那么你的方式是我唯一能想到的。