Quando executo um qemu
comando, vejo uma mensagem na linha inferior que está me fornecendo um comando IP:PORT for vncviewer.
[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
Como posso obter a última linha impressa na tela?, então extraio a última parte que é 127.0.0.1:5900
.
Como o qemu é um programa de longa duração e não retorna ao prompt, é mais fácil abrir outro terminal e verificar qual IP:PORT o qemu está usando. Então, o comando é
Obrigado pelas sugestões.
Eu usaria
tail
esed
, ou apenassed
por exemplo
Teste o bit no
()
para ver se ele dá o que você quer. O$(cmd)
é uma substituição, ele pega o stdout decmd
e se substitui por essa saída. A linha é então analisada novamente.Nota: se o programa está rodando/continuando rodando, então você não pode saber se a linha atual é a última linha. Felizmente, acho que você não precisa saber, que é a última linha.
Uma combinação de
grep
ecut
seria útil aqui.Você pode extrair a última linha com
O
-m1
sinalizador significará que o grep irá parar de ler após a primeira partida, já que este é presumivelmente um processo de longa duração.Você poderia então cortar o endereço com
Se você deseja canalizar a saída para outro processo, provavelmente desejará iniciar
qemu
em segundo plano assim:Isso deve funcionar:
<( your-qemu-command 2>&1 )
é uma substituição de processo que iniciaqemu
com stdout/stderr redirecionado para um pipe anônimo ou FIFO;grep
lê do pipe/FIFO, procurando aproximadamente o padrão IP:PORT, com IP referindo-se a um endereço IPv4. A-o
opção paragrep
garante que imprimirá apenas a combinação IP:PORT de uma linha correspondente; a-m1
opção garante quegrep
retornará ao prompt assim que encontrar o que estava procurando (ou seja, sair na primeira correspondência). A-P
opção indica o uso da sintaxe de expressão regular Perl.qemu
permanece em execução em segundo plano até terminar. Qualquer saída em stdout/stderr byqemu
após o término dogrep
comando é perdida, mas como a combinação IP:PORT deve ser a última saída, isso não deve ser motivo de preocupação.Se você deseja capturar a saída do comando acima, basta envolvê-lo em uma substituição de comando
$(...)
assim: