
我在 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>
它將以二進位模式顯示檔案。