Próbuję podłączyć rasberry Pi do jakiegoś wyświetlacza za pomocą magistrali i2c. Na początek chciałem ręcznie zapisać rzeczy, w szczególności bajty do pliku. Jak zapisujesz określone bajty w pliku? Już to przeczytałem i pomyślałem, że mój problem powinien zostać rozwiązany przez coś takiego
echo -n -e \x66\x6f\x6f > byteFileForNow
Jednak kiedy otwieram ten plik za pomocą nano, zamiast foo widzę:
x66x6fx6f
Tak więc uniknięto ukośników odwrotnych, ale nie samych bajtów. Próbowałem tego samego tylko bez -e tym razem, więc oczekiwałbym zobaczenia \ x66 \ x6f \ x6f , ale dostałem to samo, co wcześniej.
Tak więc echo ucieka przed odwrotnym ukośnikiem, samym odwrotnym i odwrotnym niezależnie od tego, czy ma to zrobić.
Jakiś pomysł jak to naprawić?
Według strony podręcznika, która powinna była zrobić to, czego szukam.
bash
obsługiwać\xHH
poprawnie, ale nie wszystkie powłoki tak.Muszla
W powłoce możesz użyć
printf
:Uwaga:
%b
- Wydrukuj powiązany argument podczas interpretacji znaków ukośnika odwrotnego.Perl
W perlu jest to jeszcze prostsze:
Pyton
Jeśli masz zainstalowany Python, wypróbuj następującą linijkę:
Testowanie:
źródło
perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'
alboperl -e 'print pack "H*", "666f6f"'
printf %b '\x66'
nie jest przenośny.printf '\x66'
jest nieco bardziej przenośny (działa zksh93
, wciąż nie zdash
noryash
).printf '\146\157\157'
lubprintf %b '\0146\0157\0157'
byłby przenośny / standardowy.Może to nie odpowiadać bezpośrednio na pytanie, ale możesz również użyć
vi
w trybie szesnastkowym:Otwórz plik i wpisz: ESC,
:%!xxd
aby przełączyć na tryb szesnastkowy.Będziesz mógł edytować część heksadecymalną (część tekstowa nie będzie aktualizowana podczas zmiany części heksadecymalnej).
Po zakończeniu naciśnij klawisz Escape, a następnie wpisz: ESC,
:%!xxd -r
aby zapisać zmiany dokonane w trybie szesnastkowym (nie zapomnij zapisać później).źródło
W każdym podręczniku online znajduje się wiele informacji; zawsze warto się temu przyjrzeć, zanim zrezygnujesz i zadasz pytanie.
man echo
wyjaśnia, które sekwencje specjalne są dozwolone. Oto wyciąg.Więc \ x86 jest po prostu niepoprawny. musi być ósemkowy i zawierać ciąg znaków w cudzysłowie, w przeciwnym razie zostanie zinterpretowany przez powłokę.
Przykład:
Edytuj 1
Jak przypomniał mi Ouki, echo jest również wbudowane w powłokę, więc informacje znajdują się na stronie podręcznika bash
man bash
; oto odpowiednia sekcja. Ale używaj cudzysłowu"
wokół łańcucha, aby zatrzymać interpretację powłoki przez ukośniki odwrotne.źródło
echo
zazwyczaj jest to wbudowane polecenie. To zależy od używanej powłoki. Domyślnym linuxem jestbash
;\xHH
prawidłowo wyświetla znak poprzez jego wartość szesnastkową.