OSX의 VirtualBox에서 netcat을 사용하여 DOS 프로그램의 인쇄 출력을 리디렉션합니다.
#!/bin/bash
VBoxManage startvm FreeDOS
while :
do
nc -l 1235 | lpr
done
VirtualBox가 닫혀도 netcat이 계속 실행된다는 점을 제외하면 작동합니다. 더 좋은 방법이 있을 겁니다!
답변1
다음과 같은 방법으로 이 작업을 수행할 수 있습니다.
- CNC 배경 | LPG 파이프라인
- 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
나는 포기한다! nc 대신 ncat을 사용하여 연결 문제를 해결하고, 작동이 안되서 백그라운드 작업을 포기했습니다. 다음은 종료 시 프로세스를 작동하고 닫습니다.
if VBoxManage startvm FreeDOS; then
if ! pgrep ncat -p 1235 -l ; then
while :
do
ncat -p 1235 -l | lpr
done
fi
fi