O símbolo &
é um control operator
e termina a lista de comandos a serem testados. Seguindo essa definição, o seguinte está livre de erros sintaxe :
if ! Xvfb $DISPLAY & then
echo 'Error: failed to create virtual frame buffer'
exit 1
fi
O problema é que, colocando em segundo plano o comando Xvfb
, o resultado do teste sempre será zero / verdadeiro.
Eu começaria o processo, depois esperaria o tempo suficiente para que ele morresse e, em seguida, verifique se ainda está por aí:
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
Referências:
- Especificações básicas do Open Group Edição 7, edição 2018 : Shell & Utilitários - Linguagem de comando do shell - Comandos do shell - Listas - Listas assíncronas - Status de saída