Я выполняю команду от хост-машины на гостевой машине (обе Ubuntu) как
VBoxManage guestcontrol Ubuntu1 run --exe "script.sh" --username xx --password xx --wait-stdout
где сценарий оболочки на гостевой машине как
#!/bin/bash
echo $1
Как я могу передать аргумент 1 при выполнении сценария оболочки?
Я предположил, что это должно работать как
run --exe "script.sh arg1"
но это не делает.
Мы можем запустить приложение на виртуальном госте с сессией SSH с хоста на эту машину. Однако это требует, чтобы сети были включены, и что openssh-сервер был установлен выполнения на гостевой машине.
Как альтернатива мы можем использовать встроенные функции Виртуального Поля для выполнения программы на рабочем госте VM. Это может быть, покончили VBoxManage guestcontrol
.
Строка в качестве примера ниже будет просто работать ls
на корне виртуальной машины:
VBoxManage --nologo guestcontrol "<vm_name>" run --exe "/bin/ls" --username <guestuser> --password <password> --wait-stdout
Запуск графического приложения на госте требует, чтобы мы определили переменную среды ДИСПЛЕЯ гостю с опцией --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