Jestem na Mac OS X 10.8.2, uruchamiam skompilowaną kopię xxd
v1.10 ( kod źródłowy ), a także kopię xxd
tego preinstalowanego na OS X.
Próbuję wygenerować sygnaturę SHA1 zakodowaną w Base64 za pomocą łańcucha potoków komend w terminalu.
Normalnie zrobiłbym coś takiego:
$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature
Plik foo_sha1_signature
zwykle zawiera zakodowany w Base64 skrót SHA1 ciągu foo
.
Problem polega na tym, xxd -p -r
że nie zwraca żadnych danych, więc plik foo_sha1_signature
jest pusty.
Jeśli podzielę polecenia, aby zobaczyć wyjście xxd -r
, otrzymam wynik (jak pokazano poniżej):
$ echo "foo" | openssl sha1 | xxd -p | xxd -r
7b36c94bcdf32bee$
Ale jeśli wypiszę standardowe wyjście do pliku, plik jest pusty:
$ 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
Jeśli spróbuję standardowego błędu potoku, standardowe wyjście pokazuje bajty, a plik jest nadal pusty:
$ echo "foo" | openssl sha1 | xxd -p | xxd -r 2> foo_sha1_bytes
7b36c94bcdf32bee$
Wreszcie, jeśli zrobię to wszystko na Linuksie, xxd
działa zgodnie z oczekiwaniami (otrzymuję podpis w pliku). Wydaje się, że jest to błąd związany z xxd
działaniem w systemie OS X 10.8.2.
Czy istnieje alternatywa open-source, xxd
która działa na Mac OS X i przesyła reprezentację bajtową standardowego wejścia na standardowe wyjście?
źródło
$'foo\n'
). Openssl, xxd i base64 to wszystkie preinstalowane wersje.xxd -p | xxd -r
nie, i nie powinno się tego oczekiwać (i wcale nie jest takie samoxxd -p -r
).xxd -p
wykonuje zrzut szesnastkowy w postaci jawnego tekstu (w tym przypadku czegoś, co jest już zrzutu szesnastkowego w postaci zwykłego tekstu);xxd -r
próbuje wykonać konwersję odwrotną (hex -> binarna), ale oczekuje, że jako dane wejściowe zostanie sformatowany zrzut (nie tekst jawny), a zamiast tego otrzyma zrzut tekstu jawnego.xxd
ani ta, którą skompilowałem.xxd -p
działa, alexxd -p -r
daje pusty ciąg. Czy istnieje alternatywa dlaxxd
tego, która działa tak samo jakxxd -p -r
?Odpowiedzi:
Powinieneś spróbować
Wyświetli plik w trybie binarnym.
źródło