Tente isto:
while true; do xterm && break; done
As aplicações têm códigos de status de saída para que, se algo sair bem, ele retorne zero ... E se algo deu errado, ele lança outro número. Isso permite que as pessoas entrem e descubram o problema exato. Isso é o que a outra resposta está fazendo.
&&
apenas verifica se o comando anterior era uma saída com status zero e, se estava, quebra o loop. Se ele falhar, ele descartará algo diferente de 0 e a cláusula && ...
não será acionada; ele simplesmente retornará e executará xterm
.