Du solltest es versuchen
xxd -b <file>
Die Datei wird im Binärmodus angezeigt.
Ich arbeite unter Mac OS X 10.8.2 und führe eine kompilierte xxd
Version von v1.10 ( Quellcode ) sowie die unter xxd
OS X vorinstallierte Kopie aus.
Ich versuche, eine Base64-codierte SHA1-Signatur über eine Kette von übergebenen Befehlen in Terminal zu generieren.
Normalerweise würde ich so etwas machen:
$ 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 ist, dass xxd -p -r
keine Daten zurückgegeben werden, daher ist die Datei foo_sha1_signature
leer.
Wenn ich die Befehle aufteile, um die Ausgabe zu sehen xxd -r
, erhalte ich ein Ergebnis (wie unten gedruckt):
$ echo "foo" | openssl sha1 | xxd -p | xxd -r 7b36c94bcdf32bee$
Wenn ich aber die Standardausgabe in eine Datei übergebe, 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 einen Standardfehler beim Piping versuche, zeigt die Standardausgabe die Bytes an und die Datei ist 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 wie erwartet (ich bekomme die Signatur in einer Datei). Dies scheint also ein Fehler xxd
in der Funktionsweise von OS X 10.8.2 zu sein.
Gibt es eine Open-Source-Alternative, xxd
die unter Mac OS X funktioniert und eine Byte-Darstellung der Standardeingabe an die Standardausgabe sendet?
Du solltest es versuchen
xxd -b <file>
Die Datei wird im Binärmodus angezeigt.