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

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

Я работаю на Mac OS X 10.8.2, использую скомпилированную копию xxdv1.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>

Файл будет отображен в двоичном режиме.

Связанный контент