Você pode fazer isso por:
- Como usar o seu nc | lpr pipeline
- Pesquisando o status da VM
- Mate o pipeline em segundo plano quando a VM morre.
Felizmente, o VBoxManage oferece uma maneira de fazer (3). VBoxManage tem um comando showvminfo
que pode fornecer o estado atual de uma vm.
VBoxManage startvm FreeDOS
(
while :
do
nc -l 1235 | lpr
done
)&
while sleep 10; do
vmstate=$(VBoxManage showvminfo --machinereadable FreeDOS | awk -F= '{ if ($1=="VMState") print $2}' | tr -d '"')
case $vmstate in
running)
echo "Still running."
;;
*)
echo "VM not running. Attempting to kill netcat"
kill %%
exit 0;
esac
done
Observe que atualmente isso só lida com "execução" versus todo o resto. Pode haver outros estados que você pode querer considerar na instrução case. Você pode potencialmente simplificar o primeiro loop while usando o argumento -k do netcat (para que você não tenha que fazer um loop).