Para um controle com script de máquinas Virtual Box, podemos fazer uso do VBoxManage comandos:
-
Listar máquinas em execução (retorna o nome e o UUID):
VBoxManage list runningvms -
Pare de executar as VMs "hibernando" as mesmas (recomendadas para evitar a perda de dados)
VBoxManage controlvm <name|uuid> savestate -
Poweroff executando VMs (não recomendado porque podemos perder dados no convidado)
VBoxManage controlvm <name|uuid> poweroff -
Use ACPI em um sistema operacional convidado compatível com ACPI (preferível a
poweroffpara um desligamento normal dos convidados)VBoxManage controlvm <name|uuid> acpipowerbutton
Veja também: Como encerrar com segurança Convidado OS no VirtualBox usando a linha de comando
Atualização do OP
Com base nesta resposta correta selecionada abaixo, adicionei este script " $HOME/bin/stop-vagrant.sh ". Então agora eu tenho algo que pode seguramente iniciar uma parada de todas as VMs vagabundas que eu poderia ter ligado ainda em uma sessão.
vboxmanage list runningvms | sed -r 's/.*\{(.*)\}//' | xargs -L1 -I {} VBoxManage controlvm {} savestate
Comando explicado:
vboxmanage list runningvms | - obtém uma lista de todos os vms em execução no VirtualBox
sed -r 's/.*\{(.*)\}//' | - retira a string para o número de identificação
xargs -L1 -I {} VBoxManage controlvm {} savestate - executa o comando salvar estado em cada caixa aberta.
Em xargs
-
-L1- pegue uma linha de cada vez -
-I {}- usa {} como espaço reservado para o próximo comando