Альтернатива xxd, которая возвращает байты?

Я нахожусь на Mac OS X 10.8.2, под управлением скомпилированной копии xxd v1.10 ( исходный код), а также копия xxd это предустановлено на OS X.

Я пытаюсь сгенерировать подпись SHA1 в кодировке Base64 через цепочку переданных команд в Терминале.

Обычно я бы сделал что-то вроде следующего:

$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature

Файл foo_sha1_signature обычно содержит хэш строки SHA1 в кодировке Base64 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>

Он отобразит файл в двоичном режиме.

Другие вопросы по тегам