J'exécute une commande à partir de la machine hôte sur la machine invitée (Ubuntu) en tant que
VBoxManage guestcontrol Ubuntu1 run --exe "script.sh" --username xx --password xx --wait-stdout
où le script shell sur l'ordinateur invité est le
#!/bin/bash
echo $1
Comment puis-je passer l'argument 1 lors de l'exécution du script Shell?
J'ai supposé que cela devrait fonctionner comme
run --exe "script.sh arg1"
mais ce n'est pas le cas.
Nous pouvons exécuter une application sur un invité virtuel avec une session SSH de l'hôte sur cette machine. Toutefois, cela nécessite que la mise en réseau soit activée et que openssh-server ait été installé et exécuté sur la machine invitée.
En guise d'alternative, nous pouvons utiliser les fonctionnalités intégrées de Virtual Box pour exécuter un programme sur une machine virtuelle invitée en cours d'exécution. Cela peut être fait avec VBoxManage guestcontrol
.
L'exemple de ligne ci-dessous ne fera que lancer ls
à la racine de la machine virtuelle:
_VBoxManage --nologo guestcontrol "<vm_name>" run --exe "/bin/ls" --username <guestuser> --password <password> --wait-stdout
_
L'exécution d'une application graphique sur l'invité nécessite que nous définissions la variable d'environnement DISPLAY sur l'invité avec l'option _--putenv
_. L'exemple suivant va exécuter et ouvrir gedit sur l'invité:
_VBoxManage --nologo guestcontrol "<vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout
_
Nous pouvons également passer des options pour ouvrir un programme. L'exemple suivant ouvrira un fichier vmtest
dans l'invité gedit:
_VBoxManage --nologo guestcontrol "vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout -- gedit/arg0 vmtest
_
Les options et les arguments sont séparés de la commande avec _--
_, comme le montre l'exemple ci-dessous d'un script de l'hôte.
Le script ci-dessous lit un fichier _example.ogg
_ utilisant paplay
sur un ordinateur invité lorsqu'il est exécuté sur l'hôte. Remplacez les variables par les valeurs appropriées.
_#!/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
_