echo stdin,除非为空,在这种情况下 cat 文件

echo stdin,除非为空,在这种情况下 cat 文件

该管道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

相关内容