返回字节的 xxd 的替代方案?

Ale*_*lds 5 sha1 xxd osx-mountain-lion macos

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

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

通常我会做类似以下的事情:

$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature
Run Code Online (Sandbox Code Playgroud)

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

问题是xxd -p -r不返回任何数据,因此文件foo_sha1_signature是空的。

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

$ echo "foo" | openssl sha1 | xxd -p | xxd -r
7b36c94bcdf32bee$
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ echo "foo" | openssl sha1 | xxd -p | xxd -r 2> foo_sha1_bytes
7b36c94bcdf32bee$
Run Code Online (Sandbox Code Playgroud)

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

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

lui*_*bus 2

你应该试试

xxd -b <file>
Run Code Online (Sandbox Code Playgroud)

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