コマンドを実行すると、qemu
一番下の行にvncviewerコマンドのIP:PORTを提供するメッセージが表示されます。
[mahmood@com[mahmood@compute-0-0 ~] qemu-system-x86_64 -m 4096 -hda win7_x64_snap.img -boot c -usbdevice tablet -enable-kvm -device e1000,netdev=host_files -netdev user,net=10.0.2.0/24,id=host_files,restrict=off
qemu-sqemu-system-x86_64: warning: host doesn't support requested feature: CPUID.80000001H:ECX.tbm [bit 21]
VNC server running on 127.0.0.1:5900
画面に最後の行を印刷する方法は?だから最後の部分を抽出しました127.0.0.1:5900
。
答え1
qemuは長期実行プログラムであり、プロンプトに戻らないため、他の端末を開いてqemuがどのIP:PORTを使用しているかを確認する方が簡単です。したがって、コマンドは次のようになります。
$ netstat -tulpn | grep qemu-system | awk '{print $4}'
127.0.0.1:5900
ご提案いただきありがとうございます。
答え2
grep
ここでは and の組み合わせがcut
便利です。
以下を使用して最後の行を抽出できます。
grep -m1 'VNC server running on'
この-m1
フラグは、grepが最初の一致の後に読み取りを停止することを意味します。これは長期実行プロセスである可能性があるためです。
その後、次のコマンドを使用してアドレスを切り捨てることができます。
cut -d' ' -f5
出力を別のプロセスにパイプするには、qemu
次のようにバックグラウンドで開始できます。
(qemu-system-x86_64... &) | grep -m1 'VNC server running on' | cut -d' ' -f5
答え3
tail
私は and を使うsed
かsed
例えば
address=$(the_above_command | sed -r -e 's/VNC server running on ([0-9.:]+)$/\1/')
echo "$address" #or some other command
ビットをテストして、()
お客様の要件を満たしていることを確認します。標準出力を取り、この出力に置き換える$(cmd)
代替品です。cmd
その後、その行を再分析します。
注:プログラムが実行中であるか継続的に実行されている場合は、現在の行が最後の行であるかどうかを知る方法はありません。幸いなことに、これが最後の行であることを知る必要はないようです。
答え4
これは働きます:
grep -m1 -oP '(\d{1,3}\.?){4}:\d{1,5}' <( your-qemu-command 2>&1 )
<( your-qemu-command 2>&1 )
qemu
起動時にstdout / stderrを匿名パイプまたはFIFOにリダイレクトするプロセスの置き換え。grep
パイプ/FIFO から読み取ると、おおよその IP:PORT パターンを探します。ここで、IP は IPv4 アドレスを表します。一致する行-o
のIP:PORTの組み合わせのみを印刷することを保証するオプションgrep
。この-m1
オプションは、grep
探している項目が見つかった場合にプロンプトに戻ることを保証します(つまり、最初の一致から終了)。この-P
オプションはPerl正規表現構文の使用を示します。- プログラムは
qemu
完了するまでバックグラウンドで実行されます。コマンドが終了するqemu
と、stdout / stderrのすべての出力が失われますが、grep
IP:PORTの組み合わせが最後の出力である必要があるため、心配する必要はありません。
上記のコマンドの出力をキャプチャするには、$(...)
次のようにコマンドの代わりにラップします。
ip_port=$( grep ...etc )