gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:32:32 25 4
gpt4 key购买 nike

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

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

# for loop to create several machines

现在,如果我在没有 MySnapShot 快照时运行此脚本,我会收到以下错误(很明显):

VBoxManage: error: Could not find a snapshot named 'MySnapShot' VBoxManage: error: Details: code VBOX_E_OBJECT_NOT_FOUND (0x80bb0001), component SessionMachine, interface IMachine, callee nsISupports VBoxManage: error: Context: "FindSnapshot(Bstr(a->argv[2]).raw(), pSnapshot.asOutParam())" at line 514 of file VBoxManageSnapshot.cpp

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

0%... Progress state: NS_ERROR_FAILURE VBoxManage: error: Snapshot operation failed VBoxManage: error: Hard disk '/home/pietro/VirtualBox VMs/peer00/Snapshots/{0183ad41-71b6-41bf-af74-38db828b2d82}.vdi' has more than one child hard disk (7) VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component SessionMachine, interface IMachine VBoxManage: error: Context: "RTEXITCODE handleSnapshot(HandlerArg*)" at line 532 of file VBoxManageSnapshot.cpp

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

最佳答案

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

vboxmanage 快照 peer00 列表 |\
grep“我的快照”&&\
vboxmanage 快照 peer00 删除“MySnapShot”||\
echo "没有快照"

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

vboxmanage snapshot peer00 删除“我的快照”||\
echo "没有快照"

关于使用 virtualbox 删除和创建快照的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47497738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com