명령을 실행하면 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 )