web-dev-qa-db-ja.com

バイトを返すxxdの代わりに?

私は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のオープンソースの代替手段はありますか?

3
Alex Reynolds

試してみてください

xxd -b <file>

ファイルをバイナリモードで表示します。

1
luiscabus