私はMacOS X 10.8.2を使用しており、xxd
v1.10( ソースコード )のコンパイル済みコピーと、プリインストールされているxxd
のコピーを実行しています。 OSXで。
ターミナルでパイプコマンドのチェーンを介してBase64でエンコードされたSHA1署名を生成しようとしています。
通常、私は次のようなことをします:
$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature
ファイルfoo_sha1_signature
には通常、文字列foo
のBase64でエンコードされたSHA1ハッシュが含まれています。
問題は、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
は期待どおりに機能します(ファイルで署名を取得します)。したがって、これはOS X10.8.2でのxxd
の動作に関するバグのようです。
Mac OS Xで動作し、標準入力のバイト表現を標準出力に送信するxxd
のオープンソースの代替手段はありますか?
試してみてください
xxd -b <file>
ファイルをバイナリモードで表示します。