linux - 用变量替换 Bash 命令

标签 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

有什么办法可以实现吗?我尝试了无数种不同的方法都无济于事。我还尝试使用 $() 语法进行命令替换,但我也没有成功。

谢谢!

最佳答案

我认为您的意思不是 {$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/

相关文章:

linux - 在 --gc-sections 之后更新链接器变量

javascript - 更改单独元素中的 javascript 变量

c - 如何在变量中获取curl输出?

Linux 内核和我的内核模块

c - PaStreamCallbackTimeInfo成员全部为0

c - ping 执行如何计算往返时间?

bash - 使用 cURL 登录

linux - 使 linux SPLIT 命令与 Mac OS 终端兼容

bash - grep 使用 grep 结果

javascript - 覆盖变量或检查变量是否存在