Я нахожусь на 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 и отправляет байтовое представление стандартного ввода в стандартный вывод?