web-dev-qa-db-ja.com

VBoxManage guestcontrolでシェル引数を渡す方法は?

ゲストマシン(両方とも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
Googlebot

SSH

ホストからこのマシンへのSSHセッションを使用して、仮想ゲストでアプリケーションを実行できます。ただし、これにはネットワークが有効であり、openssh-serverがインストールされ、ゲストマシンで実行される必要があります。

VBoxManageゲストコントロール

別の方法として、Virtual Boxの組み込み機能を使用して、実行中のゲストVMでプログラムを実行できます。これは VBoxManage guestcontrol で実行できます。

以下の例の行は、仮想マシンのルートでlsを実行するだけです。

VBoxManage --nologo guestcontrol "<vm_name>" run --exe "/bin/ls" --username <guestuser> --password <password> --wait-stdout

ゲストでグラフィカルアプリケーションを実行するには、オプション--putenvを使用してゲストにDISPLAY環境変数を定義する必要があります。次の例では、ゲストでgeditを実行して開きます。

VBoxManage --nologo guestcontrol "<vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout

プログラムを開くためのオプションを渡すこともできます。次の例では、ゲストgeditでファイルvmtestを開きます。

VBoxManage --nologo guestcontrol "vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout -- gedit/arg0 vmtest

ホストからのスクリプトの以下の例で最もよくわかるように、オプションと引数は--でコマンドから分離されています。


ホストスクリプトの例

以下のスクリプトは、ホスト上で実行されると、ゲストマシンでpaplayを使用してexample.oggファイルを再生します。変数を適切な値に置き換えます。

#!/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
2
Takkat