![バイトを返す xxd の代替手段はありますか?](https://rvso.com/image/1345297/%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E8%BF%94%E3%81%99%20xxd%20%E3%81%AE%E4%BB%A3%E6%9B%BF%E6%89%8B%E6%AE%B5%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
私は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>
ファイルはバイナリモードで表示されます。