Ich versuche, meinen Rasberry Pi über den i2c-Bus mit einem Display zu verbinden. Zu Beginn wollte ich manuell Dinge schreiben, insbesondere Bytes in eine Datei. Wie schreibt man bestimmte Bytes in eine Datei? Ich habe das schon gelesen und dachte, mein Problem sollte durch so etwas gelöst werden
echo -n -e \x66\x6f\x6f > byteFileForNow
Wenn ich diese Datei jedoch mit nano öffne, sehe ich anstelle von foo :
x66x6fx6f
So wurden die Backslashes ausgeblendet, aber nicht die Bytes selbst. Diesmal habe ich es auch nur ohne -e versucht , also hätte ich erwartet, dass \ x66 \ x6f \ x6f angezeigt wird , aber das Gleiche wie zuvor.
Das Echo entgeht also Backslashes, Backslashes allein und Backslashes, unabhängig davon, ob dies der Fall ist oder nicht.
Irgendeine Idee, wie man das behebt?
Laut der Manpage hätte das tun sollen, wonach ich suche.
quelle
bash
Griff\xHH
richtig, aber nicht alle Schalen tun.Schale
In der Shell können Sie verwenden
printf
:Hinweis:
%b
- Drucken Sie das zugehörige Argument aus, während Sie Backslash-Escapes interpretieren.Perl
Mit Perl ist es noch einfacher:
Python
Wenn Sie Python installiert haben, versuchen Sie Folgendes:
Testen:
quelle
perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'
oderperl -e 'print pack "H*", "666f6f"'
printf %b '\x66'
nicht tragbar ist.printf '\x66'
ist etwas portabler (funktioniert mitksh93
, immer noch nicht mitdash
nochyash
).printf '\146\157\157'
oderprintf %b '\0146\0157\0157'
wäre portabel / standard.Dies könnte nicht direkt die Frage beantworten, aber Sie können auch
vi
im Hex-Modus verwenden:Öffnen Sie Ihre Datei und geben Sie Folgendes ein: ESC
:%!xxd
, um in den Hex-Modus zu wechseln.Sie können den Hex-Teil bearbeiten (der Textteil wird nicht aktualisiert, wenn Sie den Hex-Teil ändern).
Wenn Sie fertig sind, drücken Sie erneut die Escape-Taste und geben Sie Folgendes ein: ESC
:%!xxd -r
, um die Änderungen, die Sie im Hex-Modus vorgenommen haben, zurückzuschreiben (vergessen Sie nicht, sie anschließend zu speichern).quelle
Das Online-Handbuch enthält viele Informationen zu jedem Befehl. Es lohnt sich immer, einen Blick darauf zu werfen, bevor Sie aufgeben und eine Frage stellen.
man echo
erklärt welche Escape-Sequenzen erlaubt sind. Hier ist ein Auszug.Also ist \ x86 einfach falsch. Es muss oktal sein und Ihre Zeichenfolge in doppelte Anführungszeichen setzen, sonst wird es von der Shell interpretiert.
Beispiel:
Bearbeiten 1
Wie Ouki mich erinnerte, ist Echo auch eine eingebaute Shell, daher finden Sie die Informationen in der Handbuchseite für Bash
man bash
. Hier ist der relevante Abschnitt. Aber verwenden Sie Anführungszeichen"
um die Zeichenfolge um die Schale zu stoppen , um die umgekehrten Schrägstrichen zu interpretieren.quelle
echo
normalerweise ein eingebauter Befehl. Das hängt also von der Shell ab, die Sie verwenden. Die Linux-Standardeinstellung istbash
;\xHH
zeigt ein Zeichen korrekt durch seinen Hexadezimalwert an.