在bash脚本中检查执行命令的结果

时间:2017-07-24 07:54:58

标签: linux bash shell ubuntu virtual-machine

我想在我登录后运行我的虚拟盒子。要做到这一点,我必须检查它是否已经运行,如果没有则启动vm。

我的问题是我无法将虚拟框命令的结果放入bash中的变量中。

我已经创建了一个函数来获取退出参数,但我收到Syntax error: Invalid parameter '|'错误消息。

我怎样才能让它发挥作用?

这是我的bash脚本:

########## Starting om-server virtual box ##############

function Run_VM {
        "$@"
        local status=$?
        if [ $status -eq 0 ]; then
                echo "Starting om-server VM!";
                VBoxManage startvm "om-server"
                sleep 30
                ssh root@192.168.1.111
        else
                echo "om-server VM is running!"
        fi
        return $status
}


check_vm_status="VBoxManage showvminfo \"om-server\" | grep -c \"running (since\""

Run_VM $check_vm_status

########## Starting om-server virtual box ##############

1 个答案:

答案 0 :(得分:1)

为了做你想做的事,你必须使用language documentation

check_vm_status="$(VBoxManage showvminfo \"om-server\" | grep -c \"running (since\")"

需要注意的是,指令将在可变扩展期间(即在变量分配期间)执行。

如果您只想在功能期间执行说明,可以使用eval

function Run_VM {
        eval "$@"
        local status=$?
        if [ $status -eq 0 ]; then
                echo "Starting om-server VM!";
                VBoxManage startvm "om-server"
                sleep 30
                ssh root@192.168.1.111
        else
                echo "om-server VM is running!"
        fi
        return $status
}


check_vm_status="VBoxManage showvminfo \"om-server\" | grep -c \"running (since\""

Run_VM $check_vm_status

请注意eval带来command substitution