3

Я нахожусь на 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 ответ1

-1

Тебе стоит попробовать

xxd -b <file>

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .