返回字节的 xxd 的替代品?

返回字节的 xxd 的替代品?

我在 Mac OS X 10.8.2 上运行xxdv1.10 的编译副本(源代码) 以及xxdOS X 上预装的副本。

我正在尝试通过终端中的管道命令链生成 Base64 编码的 SHA1 签名。

通常我会做如下的事情:

$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature

该文件foo_sha1_signature通常包含字符串的 Base64 编码的 SHA1 哈希foo

问题是xxd -p -r没有返回任何数据,所以文件foo_sha1_signature是空的。

如果我拆分命令来查看输出xxd -r,我会得到一个结果(如下所示):

$ echo "foo" | openssl sha1 | xxd -p | xxd -r
7b36c94bcdf32bee$

但是如果我将标准输出通过管道传输到文件,则该文件为空:

$ echo "foo" | openssl sha1 | xxd -p | xxd -r > foo_sha1_bytes
$ ls -al foo_sha1_bytes 
-rw-r--r--  1 alexpreynolds  staff  0 Jan  2 23:02 foo_sha1_bytes

如果我尝试管道标准错误,标准输出将显示字节并且文件仍然为空:

$ echo "foo" | openssl sha1 | xxd -p | xxd -r 2> foo_sha1_bytes
7b36c94bcdf32bee$

最后,如果我在 Linux 上执行所有这些操作,它会xxd按预期工作(我会在文件中获取签名)。所以这似乎是xxdOS X 10.8.2 中的一个错误。

xxd是否有可以在 Mac OS X 上运行并将标准输入的字节表示发送到标准输出的开源替代方案?

答案1

你应该试试

xxd -b <file>

它将以二进制模式显示文件。

相关内容