1

Трубопровод 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

Явный ответ

Пакет 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .