openssl 手册声称openssl enc
默认使用标准输出。
但是解密文件时标准输出有些不对劲。将输出通过管道传输到任何应用程序(例如 grep)会导致 openssl 错误:
error writing output file
有解决方法吗?
答案1
该错误消息意味着管道的读取端已关闭,openssl 无法再写入管道。例如,如果您通过管道传输到一个快速终止的命令而不读取其所有输入,就会发生这种情况:
$ dd count=400 if=/dev/urandom | openssl enc | true
error writing output file
通常,一个没有找到任何内容的简单 grep 就可以工作:
$ dd count=400 if=/dev/urandom | openssl enc | grep notgoingtomatch
但是,如果 grep 匹配,则注意到输入文件是一堆二进制垃圾,它将停止读取并且管道损坏:
$ dd count=400 if=/dev/urandom | openssl enc | grep a
error writing output file
Binary file (standard input) matches
(在这种情况下你可以使用grep -a
来避免错误)。
另外,如果将 grep 输出通过管道传输到寻呼机中,例如较少的,然后退出较少的在看到所有结果之前,这会破坏 grep 的管道输出,如果有更多要写入的内容,grep 就会死掉,导致 openssl 管道也被破坏。