我在 Mac OS X 10.8.2 上运行xxd
v1.10 的编译副本(源代码) 以及xxd
OS 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
按预期工作(我会在文件中获取签名)。所以这似乎是xxd
OS X 10.8.2 中的一个错误。
xxd
是否有可以在 Mac OS X 上运行并将标准输入的字节表示发送到标准输出的开源替代方案?
答案1
你应该试试
xxd -b <file>
它将以二进制模式显示文件。