バイトを返す xxd の代替手段はありますか?

バイトを返す xxd の代替手段はありますか?

私はMac OS X 10.8.2で、コンパイルされたバージョンxxd1.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 での動作に関するバグのようです。

xxdMac OS X で動作し、標準入力のバイト表現を標準出力に送信するオープンソースの代替品はありますか?

答え1

試してみてください

xxd -b <file>

ファイルはバイナリモードで表示されます。

関連情報