Alternativa para o Hauke, que não envolve a criação de um pipe nomeado (e o incômodo associado ao acesso exclusivo, limpeza ... dele), que preserva o status de saída e suporta saída de várias linhas:
result=$(
{
{
ssh host app-status >&3 3>&-; echo "$?"
} | {
until read -t1 ret; do
printf . >&2
done
exit "$ret"
}
} 3>&1
)
deve funcionar em zsh
, ksh93
e bash
( $status
é especial (um alias para $?
) em zsh
, como em (t)csh
).
Acima, temos um subshell ( { ssh ...; echo "$?"; }
) cuja saída vai para o loop until
. Nada é produzido por essa sub-rotina, exceto o $?
quando ssh
retorna. A saída ssh
em si vai para $result
por meio do descritor de arquivo 3, que fizemos para apontar para o canal que alimenta a substituição do comando.
Portanto, enquanto ssh
estiver em execução, o read -t1
expirará e, assim que ssh
retornar, read
lerá o status de saída e concluirá o loop.
Explicação mais detalhada em esta pergunta que é um acompanhamento sobre este assunto.