Você pode canalizar para uma expressão condicional como qualquer outro comando:
$ echo | wc -w | [ $(cat) -gt 0 ] && echo hi
$ echo "abc abc" | wc -w | [ $(cat) -gt 0 ] && echo hi
hi
Esta cat
em $( ... )
substituição de comando para obter a entrada canalizada na linha de comando como se estivesse escrito lá, e então testa se é numericamente maior de 0 . O bloco [ ... ]
inteiro retornará verdadeiro se estiver e, caso contrário, o contrário, para que você possa usá-lo com &&
como de costume.
Você também pode usar test
por nome, em vez de [
:
$ echo "abc abc" | wc -w | test $(cat) -gt 0 && echo hi
Você pode evitar o processo cat
com read;echo $REPLY
, mas isso provavelmente não importa.
No Bash, isso funciona, e o cat
é executado no lugar e hora certos dentro o pipeline , mas não em outros shells (incluindo zsh). Eu não sei se isso é explicitamente especificado comportamento, mas é estável em versões Bash pelo menos para 3.2, em ambos os modos POSIX e não-POSIX (macOS sh
é Bash no modo POSIX). Minha leitura do POSIX é consistente com este sendo o resultado correto.