使用VBoxManage获取正在运行的VM列表

cap*_*gon 15 bash virtualbox

我想遍历我正在运行的VM并返回引号之间的内容.

所以这个命令:

VBoxManage list runningvms
Run Code Online (Sandbox Code Playgroud)

收益:

"UbuntuServer" {7ef01f8d-a7d5-4405-af42-94d85f999dff}
Run Code Online (Sandbox Code Playgroud)

我只希望它回归:

UbuntuServer
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止(失败):

#!/bin/bash
for machine in `cat VBoxManage list runningvms`; do
        echo "$machine"
done
exit
Run Code Online (Sandbox Code Playgroud)

Mat*_*Mat 16

警告:如果您的VM名称中包含shell glob字符或包含空格,则所有这些都有风险.


如果只有一个正在运行的VM,您可以执行以下操作:

read machine stuff <<< $(VBoxManage list runningvms)
echo "$machine"
Run Code Online (Sandbox Code Playgroud)

替代bash数组(相同条件):

vbm=($(VBoxManage list runningvms))
echo "${vbm[0]}"
Run Code Online (Sandbox Code Playgroud)

如果该程序返回多行,则更经典的方法是:

for machine in $(VBoxManage list runningvms|cut -d" " -f 1); do
  echo "$machine"
done
Run Code Online (Sandbox Code Playgroud)


jfg*_*956 15

VBoxManage list runningvms | cut -d '"' -f 2 | while read machine; do
   echo "$machine"
done
Run Code Online (Sandbox Code Playgroud)

  • 这比我的好 - 如果图像名称中有空格,我的将会失败......没有考虑到这一点。 (2认同)