傳回位元組的 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>

它將以二進位模式顯示檔案。

相關內容