Você deve tentar
xxd -b <file>
Ele exibirá o arquivo no modo binário.
Estou no Mac OS X 10.8.2, executando uma cópia compilada de xxd
v1.10 ( fonte código ), bem como a cópia de xxd
que vem pré-instalada no OS X.
Estou tentando gerar uma assinatura SHA1 codificada em Base64 por meio de uma cadeia de comandos canalizados no Terminal.
Normalmente eu faria algo como o seguinte:
$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature
O arquivo foo_sha1_signature
normalmente contém um hash SHA1 codificado em Base64 da string foo
.
O problema é que xxd -p -r
não retorna nenhum dado, então o arquivo foo_sha1_signature
está vazio.
Se eu dividir os comandos para ver a saída de xxd -r
, obtenho um resultado (conforme impresso abaixo):
$ echo "foo" | openssl sha1 | xxd -p | xxd -r
7b36c94bcdf32bee$
Mas se eu canalizar a saída padrão para um arquivo, o arquivo estará vazio:
$ 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
Se eu tentar um erro padrão de tubulação, a saída padrão mostrará os bytes e o arquivo ainda estará vazio:
$ echo "foo" | openssl sha1 | xxd -p | xxd -r 2> foo_sha1_bytes
7b36c94bcdf32bee$
Finalmente, se eu fizer tudo isso no Linux, xxd
funciona como esperado (recebo a assinatura em um arquivo). Então, isso parece ser um bug de como xxd
funciona no OS X 10.8.2.
Existe uma alternativa de código aberto para xxd
, que funciona no Mac OS X e envia uma representação em bytes da entrada padrão para a saída padrão?
Você deve tentar
xxd -b <file>
Ele exibirá o arquivo no modo binário.
Tags osx-mountain-lion macos sha1 xxd