echo stdin, если не пустой, в этом случае cat файл

351
Camille Goudeseune

Конвейер fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.pngпреобразует файл в определенном двоичном формате в изображение PNG.

К сожалению, в некоторых случаях fstdrawиспускается ноль байтов. (Ошибка в его пакете, OpenFst .) Тогда dotтакже выдает нулевые байты вместо PNG, после чего convertне удается создать out.png. Этот отсутствующий файл затем нарушает последующие команды.

В первый символ канала, как можно вставить что-то, что означает эхо моего ввода, но если мой ввод пуст, вместо этого выведите файл dummy.txt, чтобы out.pngон всегда создавался?

(Можно написать скрипт, но наверняка какой-то встроенный в оболочку или стандартный инструмент уже делает это.)

Что-то вроде fstdraw in.fst | cat_maybe dummy.txt | dot ...

1

1 ответ на вопрос

1
Kamil Maciorowski

Явный ответ

Пакет moreutilsпредоставляет ifneинструмент. Обычно он запускает данную команду тогда и только тогда, когда стандартный ввод не пуст. Он имеет, однако, режим обратной работы :

-n 

Обратный ход. Запустите команду, если стандартный ввод пуст.

Обратите внимание, что если стандартный ввод не пустой, ifneв этом случае он пропускается .

Итак, решение таково:

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

Альтернативный подход

Это было опубликовано первоначально в качестве комментария. Дело в том, чтобы определить, когда происходит convertсбой, и действовать соответствующим образом. Метод не отвечает на явный вопрос, но может решить вашу конкретную проблему. Я публикую это здесь для образовательных целей.

fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.png || cp dummy.png out.png 

Похожие вопросы