저는 Xvfb를 사용하여 가상 프레임 버퍼를 시작하는 스크립트를 작성 중입니다. 명령이 성공하는지 확인하고 싶지만 X 서버가 종료될 때까지 Xvfb가 계속 실행되기 때문에 명령이 완료될 때까지 스크립트가 기다리지 않기를 바랍니다. 예를 들어:
if ! Xvfb $DISPLAY &; then
echo 'Error: failed to create virtual frame buffer'
exit 1
fi
xpid=$!
# do stuff that uses frame buffer
kill $xpid
문제는 구문 오류가 발생한다는 것입니다 &;
.
$ stuff.sh
stuff.sh: line 149: syntax error near unexpected token `;'
stuff.sh: line 149: `if ! Xvfb $DISPLAY &; then'
줄을 다음으로 변경하려고 시도했지만 if ! Xvfb $DISPLAY & ;
여전히 오류가 발생합니다.
답변1
기호 &
는 control operator
테스트할 명령 목록을 끝내는 입니다. 이 정의에 따르면 다음은 무료입니다.통사론실수:
if ! Xvfb $DISPLAY & then
echo 'Error: failed to create virtual frame buffer'
exit 1
fi
문제는 백그라운드 명령을 사용하면 Xvfb
테스트 결과가 다음과 같다는 것입니다.언제나0/참입니다.
프로세스를 시작한 다음 사라질 때까지 기다렸다가 아직 남아 있는지 확인합니다.
Xvfb $DISPLAY &
xvfbpid=$!
sleep 3 ## adjust to taste
if ! ps -p $xvfbpid > /dev/null
then
echo 'Error: failed to create virtual frame buffer'
exit 1
fi
인용하다:
- Open Group 기본 사양 2018년 7호판: 쉘 및 유틸리티 - 쉘 명령 언어 - 쉘 명령 - 목록 - 비동기 목록 - 종료 상태