Alternativa para o xxd que retorna bytes?

3

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?

    
por Alex Reynolds 03.01.2013 / 08:06

1 resposta

-1

Você deve tentar

xxd -b <file>

Ele exibirá o arquivo no modo binário.

    
por 03.10.2018 / 03:53