Pages

Friday, 30 August 2013

通过命令获取VirtualBox虚拟机Guest的IP地址

需要在虚拟机和主机之间同步代码和文件。Guest通过Bridge方式上网。我的想法是写个脚本用rsync同步,可是由于Bridge进局域网之后,IP会随DHCP配置改变而改变,因此需要通过命令获取Guest对应的IP地址。(我知道可以用Shared Folder,但是我总是配置不好那个Guest Addition。而且那个东西效率差的一X)
查了文档,发现这个问题不是很复杂。用VBoxManage的命令可以方便的获取IP地址。下面命令会返回一个差不多我们想要的:
VBoxManage guestproperty get "abc" /VirtualBox/GuestInfo/Net/0/V4/IP
其中abc是你虚拟机的名称,你可以使用如下命令列出所有注册过的虚拟机
VBoxManage list vms
后面那串乱码是所谓的UUID,在前一个代码里的"abc"也可以用它对应的UUID代替,那样你的代码会显得,俄,更加犀利以及难懂一些~_^
也许某些同学会注意到,命令除了返回IP地址之外,还有一个Value:。这些字符如果传给ssh,rsync等程序必然会引起错误。解决方法是用 tr命令在输入之前把多余的字符去掉,注意,返回值末尾有一个\n,同样需要去掉。以下代码用于自动在主机的a文件夹和Guest的a文件夹之间同步。
guestIP=`VBoxManage guestproperty get "abc" /VirtualBox/GuestInfo/Net/0/V4/IP | tr -d "[\"Value: \"\n]"`
rsync -avz -e ssh ronald@$guestIP:/home/ronald/a a
ronald是俺在Guest中的用户名.