使用virtualbox删除和创建快照的Bash脚本

使用virtualbox删除和创建快照的Bash脚本,bash,virtualbox,Bash,Virtualbox,我正在尝试编写一个尽可能简单的bash脚本,以便从“父”虚拟机(称为peer00)克隆虚拟机。为了克隆这些机器,我首先需要一个快照 vboxmanage snapshot peer00 delete "MySnapShot" vboxmanage snapshot peer00 take "MySnapShot" # for loop to create several machines 现在,如果在没有MySnapShotsnapshot的情况下运行此脚本,则会出现以下错误(显然): VB

我正在尝试编写一个尽可能简单的bash脚本,以便从“父”虚拟机(称为
peer00
)克隆虚拟机。为了克隆这些机器,我首先需要一个快照

vboxmanage snapshot peer00 delete "MySnapShot"
vboxmanage snapshot peer00 take "MySnapShot"

# for loop to create several machines
现在,如果在没有
MySnapShot
snapshot的情况下运行此脚本,则会出现以下错误(显然):

VBoxManage:错误:找不到名为“MySnapShot”的快照 VBoxManage:错误:详细信息:找不到代码VBOX\u E\u对象(0x80bb0001)、组件会话计算机、接口IMachine、被调用方支持 VBoxManage:error:Context:“文件VBoxManageSnapshot.cpp第514行的FindSnapshot(Bstr(a->argv[2]).raw(),pSnapshot.asOutParam())”

另一方面,如果在快照已存在的情况下运行它,则会得到以下其他输出:

0%。。。 进度状态:NS\u错误\u失败 VBoxManage:错误:快照操作失败 VBoxManage:错误:硬盘“/home/pietro/VirtualBox VMs/peer00/Snapshots/{0183ad41-71b6-41bf-af74-38db828b2d82}.vdi”有多个子硬盘(7) VBoxManage:错误:详细信息:代码NS\U错误\U故障(0x80004005)、组件会话计算机、接口IMachine VBoxManage:错误:文件VBoxManageSnapshot.cpp第532行的上下文:“RTEXICODE handleSnapshot(HandlerArg*)”


如何编写一种“if语句”,在尝试删除快照之前检查快照是否已经存在?此外,为什么我会出现第二个错误?我真的不明白

您可以使用list子命令检查是否存在快照:

vboxmanage快照对等点列表|\
格雷普“我的快照”&&\
vboxmanage快照peer00删除“MySnapShot”||\
回显“无快照”

另一种方法是忽略删除失败:

vboxmanage快照peer00删除“我的快照”||\
回显“无快照”

有一个--uniquename参数(支持数字、时间戳、空格和力值)。也许值得检查一下它的行为。