Shell 使用文件路径使用Virtualbox启动虚拟机

Shell 使用文件路径使用Virtualbox启动虚拟机,shell,virtual-machine,virtualbox,Shell,Virtual Machine,Virtualbox,我有一个在Linux Debian上使用virtual box运行的虚拟机。 它被放置在一个隐藏的Truecrypt容器中 我喜欢尽可能地减少虚拟机的存在。 因此,将虚拟机导入到虚拟机,在其GUI中留下一个条目 这不是我想要的。(我每次都可以手动移除它,但这很费力 在紧急情况下,不可能关闭。) 有没有办法用virtualbox启动虚拟机 使用.vbox文件的路径而不是导入文件,然后使用导入的VM的名称 因此,不是: vboxmanage startvm <Name_Of_VM_Here&g

我有一个在Linux Debian上使用virtual box运行的虚拟机。 它被放置在一个隐藏的Truecrypt容器中

我喜欢尽可能地减少虚拟机的存在。 因此,将虚拟机导入到虚拟机,在其GUI中留下一个条目 这不是我想要的。(我每次都可以手动移除它,但这很费力 在紧急情况下,不可能关闭。)

有没有办法用virtualbox启动虚拟机 使用.vbox文件的路径而不是导入文件,然后使用导入的VM的名称

因此,不是:

vboxmanage startvm <Name_Of_VM_Here>
vboxmanagestartvm
比如:

vboxmanage startvm <Path_to_VMDK_file>
vboxmanagestartvm
您可以使用:

vboxmanage showhdinfo "PathToYourVMDK"
它将在输出的最后一行显示其UUID

然后,您可以使用UUID启动该VM,而不是使用

vboxmanage startvm YourUUID
因此,基本上您需要的命令是:

vboxmanage startvm $(vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}')
如果未使用
bash
,则需要使用如下反勾号替换
$()

vboxmanage startvm `vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}'`
vboxmanage startvm 77743eca-e338-471c-b824-60c5c5c22b6f
已更新

如果编写脚本和调试脚本时遇到问题,请执行以下步骤

首先。。。使基本
showhdinfo
命令工作。所以试试这个:

vboxmanage showhdinfo "PathToYourVMDK"

UUID:           c3166b8a-3c21-4531-927c-030f3cfb9728
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       ...
Storage format: VDI
Format variant: fixed default
Capacity:       8192 MBytes
Size on disk:   8192 MBytes
In use by VMs:  UbuntuVM (UUID: 77743eca-e338-471c-b824-60c5c5c22b6f)   <-- THIS ONE
这将启动虚拟机

第三。。。下一个检查是确保
awk
正确提取UUID,所以让我们试试看

vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}'

77743eca-e338-471c-b824-60c5c5c22b6f
这看起来是正确的,现在将其全部放入脚本中:

#!/bin/bash -xv
UUID=$(vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}')
echo UUID:$UUID
vboxmanage startvm $UUID

那些投票反对我的人能解释一下原因吗?我看不出我的问题有什么不对。事实上,我认为这是完全正确的。其他人甚至把它加入了她的最爱。谢谢,马克!我会测试一下,然后决定是否接受你的答案。这对我不起作用。我将命令放入一个shell脚本中,该脚本具有到VMDK的相对路径。外壳程序指导我如何正确使用vbox命令(如参数——键入gui | sdl | headless)。我怎样才能让它工作呢?让脚本的第一行
#/bin/bash-xv
并再次运行它。编辑您的问题并粘贴到输出中。我添加了一些额外的信息来帮助您调试它-请让我知道它是如何进行的。