0

我编写了一个脚本,使用 VMrun 运行 Vmware windows guest,在该映像中运行脚本并关闭 VMware 会话。脚本如下:

vmrun start XP/XP/"Windows XP Pro SP3_original.vmx"  

~/Desktop$ vmrun -gu ** -gp ** runProgramInGuest XP/XP/"Windows XP Pro SP3_original.vmx" "C:\Documents and Settings\Computer\Desktop\script.bat"

vmrun stop XP/XP/"Windows XP Pro SP3_original.vmx"

但是,该脚本会在映像启动并运行之前执行最后两个命令,因此导致无法在 Windows 客户机中运行该脚本。有什么方法可以等到图像启动然后继续执行命令?

4

1 回答 1

0

我要做几个假设:

1.) 您的机器将获得一个有效的 IP 地址,而不是 WindowsAPIPA地址。

2.) 您正在运行 VMware Workstation(有一个readVariable选项)

如果是这种情况,您可以 ping 机器并等待有效 IP,然后以这种方式执行您的脚本:

#!/bin/bash

vmrun start XP/XP/"Windows XP Pro SP3_original.vmx" 

win_ip=$(vmrun -T ws readVariable $YOUR_MACHINE guestVar ip)

# First loop waits for the address variable to populate
while [ -z $win_ip ]
do
   win_ip=$(vmrun -T ws readVariable $YOUR_MACHINE guestVar ip)
done

# Second loop waits for a valid address
while [ ! -z $(printf $win_ip | grep "169.254") ]
do
   win_ip=$(vmrun -T ws readVariable $YOUR_MACHINE guestVar ip)
done 

~/Desktop$ vmrun -gu ** -gp ** runProgramInGuest XP/XP/"Windows XP Pro SP3_original.vmx" "C:\Documents and Settings\Computer\Desktop\script.bat"

vmrun stop XP/XP/"Windows XP Pro SP3_original.vmx"

这样做可以确保网络完全初始化,以防您的脚本依赖网络来实现任何功能。

于 2013-07-11T17:34:02.197 回答