echo stdin, a menos que vazio, caso em que cat um arquivo

1

O pipeline fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.png converte um arquivo em um determinado formato binário em uma imagem PNG.

Infelizmente, em alguns casos, fstdraw emite zero bytes. (Um bug em seu pacote, OpenFst .) Então dot também emite zero bytes em vez de um PNG, após o queconvert falha ao criar out.png . Esse arquivo ausente, em seguida, quebra comandos posteriores.

No primeiro símbolo de pipe, como alguém pode inserir algo que significa ecoa minha entrada, mas se minha entrada estiver vazia, em vez disso, envie o arquivo dummy.txt , então out.png é sempre criado?

(Poder-se-ia escrever um script, mas certamente alguma ferramenta interna ou ferramenta padrão faz isso já.)

Algo como fstdraw in.fst | cat_maybe dummy.txt | dot ...

    
por Camille Goudeseune 03.03.2017 / 22:06

1 resposta

1

Resposta explícita

O pacote moreutils fornece a ferramenta ifne . Normalmente, ele executa o comando fornecido se e somente se a entrada padrão não estiver vazia. Tem, no entanto, um modo operação reversa :

-n

Reverse operation. Run the command if the standard input is empty.

Note that if the standard input is not empty, it is passed through ifne in this case.

Então a solução é:

fstdraw in.fst | ifne -n cat dummy.txt | dot -Tpng | convert - -rotate 90 out.png

Abordagem alternativa

Isso foi postado originalmente como um comentário. O objetivo é detectar quando convert falha e age de acordo. O método não responde à pergunta explícita, mas pode resolver seu problema específico. Estou postando aqui para fins educacionais.

fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.png || cp dummy.png out.png
    
por 11.06.2017 / 19:06