OSXのVirtualBoxでnetcatを使用してDOSプログラムの印刷出力をリダイレクトします。
#!/bin/bash
VBoxManage startvm FreeDOS
while :
do
nc -l 1235 | lpr
done
VirtualBoxが閉じてもnetcatが実行され続ける点を除いて動作します。もっと良い方法があるでしょう!
答え1
次の方法でこれを実行できます。
- CNCの背景|写真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