我编写了一个脚本,使用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 guest虚拟机中运行脚本。是否有任何方法等待图像启动然后继续执行命令?
答案 0 :(得分:0)
我将做一些假设:
1。)您的计算机将获得有效的IP地址,而不是Windows APIPA
地址。
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"
这样做可以确保网络完全初始化,以防脚本依赖网络获取任何功能。