Alternativa ao xxd que retorna bytes?

Alternativa ao xxd que retorna bytes?

Estou no Mac OS X 10.8.2, executando uma cópia compilada da xxdv1.10 (Código fonte), bem como a cópia xxdque 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_signaturenormalmente contém um hash SHA1 codificado em Base64 da string foo.

O problema é que xxd -p -rnão retorna nenhum dado, então o arquivo foo_sha1_signaturefica 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 canalizar o erro padrã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$

Por fim, se eu fizer tudo isso no Linux, xxdfunciona conforme o esperado (obtenho a assinatura em um arquivo). Portanto, isso parece ser um bug no xxdfuncionamento do OS X 10.8.2.

Existe uma alternativa de código aberto que xxdfunciona no Mac OS X e envia uma representação de bytes da entrada padrão para a saída padrão?

Responder1

Você deveria tentar

xxd -b <file>

Ele exibirá o arquivo em modo binário.

informação relacionada