![Альтернатива xxd, которая возвращает байты?](https://rvso.com/image/1345297/%D0%90%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%B0%20xxd%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%B0%D1%8F%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D1%82%20%D0%B1%D0%B0%D0%B9%D1%82%D1%8B%3F.png)
Я работаю на 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>
Файл будет отображен в двоичном режиме.