Uma maneira seria usar um loop while que seja executado
zlogin <zone> svcs -xv
ou
zlogin <zone> svcs svc:/milestone/multi-user | grep online
e usa a saída de um desses comandos para determinar se a zona está pronta ou se deve dormir um pouco mais.
O segundo comando pode ser melhor se você falhar regularmente nos serviços que precisam de intervenção manual para corrigir, pois o script pode ser interrompido de outra forma. Você provavelmente também deve ter um valor de tempo limite para que seu script não espere para sempre por um não global que nunca atenda à sua condição.
Em meus testes, eu esperava um código de saída diferente de zero quando a saída da execução svcs -xv
gerou serviços com falha, mas o código de saída é zero, portanto, fique ciente disso. Por esse motivo, se você usar o comando zlogin <zone> svcs -xv
e quiser testar o código de saída, talvez seja melhor executar zlogin <zone> svcs -xv | grep State
. Um código de saída diferente de zero indica que nenhum serviço com falha e um código de saída zero indicarão alguns serviços com falha.