Bash将命令输出与空文本字符串进行比较

时间:2013-12-13 21:14:40

标签: macos bash

我正在尝试编写一个比较命令输出并运行循环的函数,直到它不返回任何内容。当我运行它时,它的行为就像条件没有得到满足而且脚本永远停留在while循环中,即使我在提示符下运行命令它也不会返回任何内容。任何帮助是极大的赞赏。机器是Mac OS 10.9,这就是为什么su的语法有点时髦。

stopvm ()
{
    su macadmin -c "VBoxManage controlvm tjfog acpipowerbutton"
    while [`su macadmin -c 'VBoxManage list runningvms | grep tjfog'` != ""]
    do
        echo "Waiting for the VM to shutdown"
        sleep 3
    done
}

在提示符下运行会返回以下内容。

bash-3.2# su macadmin -c VBoxManage list runningvms | grep tjfog
bash-3.2#

谢谢!

1 个答案:

答案 0 :(得分:3)

[ and ][之后和]之前需要空格。

但您可以将while条件重写为:

while su macadmin -c 'VBoxManage list runningvms | grep -q tjfog'
do
    echo "Waiting for the VM to shutdown"
    sleep 3
done