
Ich verwende Mac OS X 10.8.2 und eine kompilierte Kopie von xxd
v1.10 (Quellcode) sowie die Kopie davon, xxd
die auf OS X vorinstalliert ist.
Ich versuche, über eine Kette von Pipe-Befehlen im Terminal eine Base64-codierte SHA1-Signatur zu generieren.
Normalerweise würde ich etwa Folgendes tun:
$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature
Die Datei foo_sha1_signature
enthält normalerweise einen Base64-codierten SHA1-Hash der Zeichenfolge foo
.
Das Problem besteht darin, dass xxd -p -r
keine Daten zurückgegeben werden und die Datei daher foo_sha1_signature
leer ist.
Wenn ich die Befehle aufteile, um mir die Ausgabe anzusehen xxd -r
, erhalte ich ein Ergebnis (wie unten angegeben):
$ echo "foo" | openssl sha1 | xxd -p | xxd -r
7b36c94bcdf32bee$
Wenn ich die Standardausgabe jedoch in eine Datei umleite, ist die Datei leer:
$ 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
Wenn ich versuche, die Standardfehlerausgabe weiterzuleiten, zeigt die Standardausgabe die Bytes an, und die Datei ist immer noch leer:
$ echo "foo" | openssl sha1 | xxd -p | xxd -r 2> foo_sha1_bytes
7b36c94bcdf32bee$
Wenn ich das alles unter Linux mache, xxd
funktioniert es schließlich wie erwartet (ich bekomme die Signatur in einer Datei). Es scheint sich also um einen Fehler bei der xxd
Funktionsweise unter OS X 10.8.2 zu handeln.
Gibt es eine Open-Source-Alternative, xxd
die unter Mac OS X funktioniert und eine Byte-Darstellung der Standardeingabe an die Standardausgabe sendet?
Antwort1
Du solltest es versuchen
xxd -b <file>
Die Datei wird im Binärmodus angezeigt.