我在客户机(均为 Ubuntu)上运行主机上的命令
VBoxManage guestcontrol Ubuntu1 run --exe "script.sh" --username xx --password xx --wait-stdout
客户机上的 shell 脚本如下
#!/bin/bash
echo $1
如何在执行 shell 脚本时传递参数 1?
我认为它应该可以
run --exe "script.sh arg1"
但事实并非如此。
答案1
SSH
我们可以在虚拟客户机上运行应用程序,并使用从主机到此计算机的 SSH 会话。但是,这需要启用网络,并且openssh-服务器已安装并在客户机上运行。
VBoxManage 访客控制
作为替代方案,我们可以使用 Virtual Box 的内置功能在正在运行的客户虚拟机上执行程序。这可以通过以下方式完成VBoxManage guestcontrol
。
下面的示例行将只ls
在虚拟机的根目录下运行:
VBoxManage --nologo guestcontrol "<vm_name>" run --exe "/bin/ls" --username <guestuser> --password <password> --wait-stdout
在客户机上运行图形应用程序需要我们使用选项为客户机定义 DISPLAY 环境变量--putenv
。下一个示例将在客户机上运行并打开 gedit:
VBoxManage --nologo guestcontrol "<vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout
我们还可以传递选项来打开程序。下一个示例将vmtest
在客户机 gedit 中打开一个文件:
VBoxManage --nologo guestcontrol "vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout -- gedit/arg0 vmtest
选项和参数与命令分开,--
如下面的主机脚本示例中所示。
主机脚本示例
以下脚本将在主机上运行时播放客户机中的example.ogg
文件。用适当的值替换变量。paplay
#!/bin/bash
VM_NAME=myvm
VM_USER=takkat
VM_PASSWD=topsecret
VM_EXEC=paplay
VM_EXEC_PATH=/usr/bin/paplay
VM_ARGS=/home/takkat/Music/example.ogg
VBoxManage --nologo guestcontrol $VM_NAME run --exe $VM_EXEC_PATH \
--username $VM_USER --password $VM_PASSWD --wait-stdout \
-- {$VM_EXEC}/arg0 $VM_ARGS