Как передать аргументы оболочки с помощью гостевого управления VBoxManage?

Я запускаю команду с главной машины на гостевой машине (оба Ubuntu) как

VBoxManage guestcontrol Ubuntu1 run --exe "script.sh" --username xx --password xx --wait-stdout

, где сценарий оболочки на гостевой машине равен

#!/bin/bash echo $1

Как я могу передать аргумент 1 во время выполнения сценария оболочки?

Я предположил, что он должен работать как

run --exe "script.sh arg1"

, но это не так.

1
задан 23 April 2017 в 22:50

3 ответа

SSH

Мы можем запустить приложение у виртуального гостя с сеансом SSH с хоста на этом компьютере. Однако это требует, чтобы сеть была включена, и что openssh-server установлен на гостевой машине.

VBoxManage guestcontrol

В качестве альтернативы мы можем использовать встроенные функции Virtual Коробка для запуска программы на гостевой виртуальной машине. Это можно сделать с помощью openssh-server .

Пример строки ниже просто запустит 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
1
ответ дан 22 May 2018 в 23:18
  • 1
    Извините, я заблудился. Где вы argv1 в команде guestcontrol? – Googlebot 23 April 2017 в 23:10
  • 2
    @Все это называется arg0. В строке примера gedit это -- gedit/arg0, затем vmtest, чтобы открыть файл vmtest в gedit гостя, в сценарии примера это переменная VM_ARGS, которая воспроизводит файл ogg в гостевой и гостевой жестком диске. Не забудьте всегда давать полные пути. – Takkat 23 April 2017 в 23:23
  • 3
    Замечательно! Работает как шарм. – Googlebot 23 April 2017 в 23:36

SSH

Мы можем запустить приложение у виртуального гостя с сеансом SSH с хоста на этом компьютере. Однако это требует, чтобы сеть была включена, и что openssh-server установлен на гостевой машине.

VBoxManage guestcontrol

В качестве альтернативы мы можем использовать встроенные функции Virtual Коробка для запуска программы на гостевой виртуальной машине. Это можно сделать с помощью openssh-server .

Пример строки ниже просто запустит 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
1
ответ дан 18 July 2018 в 14:24

SSH

Мы можем запустить приложение у виртуального гостя с сеансом SSH с хоста на этом компьютере. Однако это требует, чтобы сеть была включена, и что openssh-server установлен на гостевой машине.

VBoxManage guestcontrol

В качестве альтернативы мы можем использовать встроенные функции Virtual Коробка для запуска программы на гостевой виртуальной машине. Это можно сделать с помощью openssh-server .

Пример строки ниже просто запустит 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
1
ответ дан 24 July 2018 в 20:23

Другие вопросы по тегам:

Похожие вопросы: