¿Alternativa a xxd que devuelve bytes?

¿Alternativa a xxd que devuelve bytes?

Estoy en Mac OS X 10.8.2 y ejecuto una copia compilada de xxdv1.10 (código fuente) así como la copia xxdque viene preinstalada en OS X.

Estoy intentando generar una firma SHA1 codificada en Base64 a través de una cadena de comandos canalizados en la Terminal.

Normalmente haría algo como lo siguiente:

$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature

El archivo foo_sha1_signaturenormalmente contiene un hash SHA1 codificado en Base64 de la cadena foo.

El problema es que xxd -p -rno devuelve ningún dato, por lo que el archivo foo_sha1_signatureestá vacío.

Si divido los comandos para ver el resultado de xxd -r, obtengo un resultado (como se imprime a continuación):

$ echo "foo" | openssl sha1 | xxd -p | xxd -r
7b36c94bcdf32bee$

Pero si canalizo la salida estándar a un archivo, el archivo está vacío:

$ 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

Si intento canalizar el error estándar, la salida estándar muestra los bytes y el archivo aún está vacío:

$ echo "foo" | openssl sha1 | xxd -p | xxd -r 2> foo_sha1_bytes
7b36c94bcdf32bee$

Finalmente, si hago todo esto en Linux, xxdfunciona como se esperaba (obtengo la firma en un archivo). Entonces esto parece ser un error en el xxdfuncionamiento en OS X 10.8.2.

¿Existe una alternativa de código abierto que xxdfuncione en Mac OS X y envíe una representación en bytes de la entrada estándar a la salida estándar?

Respuesta1

Deberías intentarlo

xxd -b <file>

Mostrará el archivo en modo binario.

información relacionada