在 OSX 下的 VirtualBox 中使用 netcat 重定向 DOS 程序的打印输出。
#!/bin/bash
VBoxManage startvm FreeDOS
while :
do
nc -l 1235 | lpr
done
除了 VirtualBox 关闭时 netcat 继续运行之外,此方法有效。一定会有更好的办法!
答案1
您可以通过以下方式执行此操作:
- 数控背景 |液化石油气管道
- 轮询VM的状态
- 当虚拟机终止时终止后台管道。
幸运的是,VBoxManage 提供了一种方法来实现 (3)。 VBoxManage 有一个showvminfo
命令可以为您提供虚拟机的当前状态。
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
请注意,目前这仅处理“运行”而不是其他一切。您可能希望在案例陈述中考虑其他州。您还可以使用 netcat 的 -k 参数来简化第一个 while 循环(这样您就根本不必循环)。
答案2
我放弃!通过使用 ncat 而不是 nc 解决了连接问题,并放弃了后台工作,因为我无法让它工作。以下内容有效并在退出时关闭进程。
if VBoxManage startvm FreeDOS; then
if ! pgrep ncat -p 1235 -l ; then
while :
do
ncat -p 1235 -l | lpr
done
fi
fi