ifne
não define um código de saída com base no fato de a entrada estar vazia ou não, portanto, &&
e ||
não funcionarão como esperado. Uma abordagem alternativa à resposta de Babyy é usar pee
do mesmo pacote:
printf "asdf\n" | pee 'ifne cat -' 'ifne echo "stream not empty"'
Isso funciona como tee
, mas duplica o fluxo de entrada em vários canais, tratando cada argumento como um comando a ser executado. ( tpipe
é um comando similar, mas se comporta de maneira ligeiramente diferente.)
Um possível problema é que cada um dos comandos pode estar gravando em stdout em paralelo, dependendo do buffer e do comprimento da entrada / saída, há uma chance de que a saída seja intercalada ou varie de corrida para execução (efetivamente uma corrida ). Isso provavelmente pode ser eliminado usando sponge
(mesmo pacote) em vez de cat
e / ou outras soluções buffering / unbuffering . Isso afeta o exemplo que você deu, mas pode não afetar seu caso de uso real.