Modo padrão / canônico de testar se a saída produzida por pipeline precedente?

4

A situação que tenho em mente tem a seguinte estrutura:

% some_command | [PRODUCED OUTPUT] || echo 'no output' >&2

Aqui [PRODUCED OUTPUT] significa algum comando de teste ainda não especificado, cujo valor deve ser true (ou seja, "sucesso") iff some_command produz qualquer saída.

Naturalmente, some_command representa um pipeline arbitrariamente complexo e, da mesma forma, echo 'no output' >&2 significa alguma ação arbitrária para executar no caso de some_command não produzir saída.

Existe um teste padrão para fazer o trabalho representado acima por [PRODUCED OUTPUT] ? grep -qm1 '.' chega perto, mas também informa falso sobre uma entrada que consiste em linhas vazias.

Ao contrário de Verifique se o canal está vazio e execute um comando nos dados se não for , só quero descartar a entrada se estiver presente, não preciso preservá-la.

    
por kjo 13.04.2016 / 16:31

2 respostas

2

Que tal usar read ?

$ cat /dev/null | read pointless || echo no output
no output
$ echo something | read pointless || echo no output
$ printf "\n" | read pointless || echo no output
$ printf " \n" | read pointless || echo no output
$ false | read pointless || echo no output
no output

De acordo com a definição do Open Group :

EXIT STATUS

The following exit values shall be returned:

0

Successful completion.

>0

End-of-file was detected or an error occurred.

    
por 13.04.2016 / 16:47
-1

Para mim, funcionou bem | read -n 1 .

$ echo 'faw' | read -n 1 || echo 'no output'
$ echo | read -n 1 || echo 'no output'
$ printf '' | read -n 1 || echo 'no output'
no output
$ false | read -n 1 || echo 'no output'
no output
$
    
por 16.11.2018 / 15:16