我是 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
有什么办法可以实现吗?我尝试了无数种不同的方法都无济于事。我还尝试使用 $() 语法进行命令替换,但我也没有成功。
谢谢!
最佳答案
我认为您的意思不是 {$1}
,而是 "$1"
。此外,您可以只执行 pgrep -c "$1"
而不是两个管道。
此外,也没有必要将grep -c
的输出与0
进行比较,因为您可以直接查看命令是否失败。因此,一个简化得多的版本可能是:
while pgrep "$1" > /dev/null
do
sleep 4
done
关于linux - 用变量替换 Bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935833/