Тебе стоит попробовать
xxd -b <file>
Он отобразит файл в двоичном режиме.
Я нахожусь на 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 и отправляет байтовое представление стандартного ввода в стандартный вывод?
Тебе стоит попробовать
xxd -b <file>
Он отобразит файл в двоичном режиме.