该管道fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.png
将某种二进制格式的文件转换为 PNG 图像。
不幸的是,在某些情况下fstdraw
会发出零字节。(其软件包中的一个错误,开放金融) 然后dot
也发出零字节而不是 PNG,因此convert
无法创建out.png
。该丢失的文件会破坏后续命令。
在第一个管道符号处,如何插入表示回显我的输入,但如果我的输入为空,则输出文件 dummy.txt,所以out.png
总是被创造吗?
(可以编写一个脚本,但肯定有一些 shell 内置或标准工具已经这样做了。
就像是fstdraw in.fst | cat_maybe dummy.txt | dot ...
答案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