
私はMac OS X 10.8.2で、コンパイルされたバージョンxxd
1.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>
ファイルはバイナリモードで表示されます。