J'essaie de connecter mon rasberry Pi à certains écrans en utilisant le bus i2c. Pour commencer, je voulais écrire manuellement des éléments, notamment des octets, dans un fichier. Comment écrivez-vous des octets spécifiques dans un fichier? J'ai déjà lu celui-là et j'ai pensé que mon problème devrait être résolu par quelque chose comme ceci
echo -n -e \x66\x6f\x6f > byteFileForNow
Cependant, lorsque j'ouvre ce fichier avec nano, au lieu de foo, je vois:
x66x6fx6f
Ainsi, les barres obliques inverses ont été échappées, mais pas les octets eux-mêmes. J'ai aussi essayé la même chose seulement sans le -e cette fois, donc j'aurais attendu de voir \ x66 \ x6f \ x6f , mais j'ai obtenu le même résultat qu'auparavant.
Donc, echo échappe aux barres obliques inverses, aux barres obliques inverses seules et inverses, qu’il soit ou non supposé l’être.
Une idée comment résoudre ce problème?
Selon la page de manuel qui aurait dû faire ce que je cherche.
la source
bash
manipuler\xHH
correctement, mais tous les obus ne le font pas.coquille
En shell, vous pouvez utiliser
printf
:Remarque:
%b
- Imprimez l'argument associé lors de l'interprétation des caractères d'échappement des barres obliques inverses.Perl
Avec perl, c'est encore plus simple:
Python
Si vous avez installé Python, essayez l'un des doublons suivants:
Essai:
la source
perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'
ouperl -e 'print pack "H*", "666f6f"'
printf %b '\x66'
n'est pas portable.printf '\x66'
est légèrement plus portable (fonctionne avecksh93
, toujours pas avecdash
niyash
).printf '\146\157\157'
ouprintf %b '\0146\0157\0157'
serait portable / standard.Cela pourrait ne pas répondre directement à la question, mais vous pouvez également utiliser
vi
en mode hexadécimal:Ouvrez votre fichier et tapez: ESC
:%!xxd
pour passer en mode hexadécimal.Vous pourrez éditer la partie hexadécimale (la partie texte ne sera pas mise à jour lorsque vous modifierez la partie hexagonale).
Lorsque vous avez terminé, appuyez de nouveau sur échapper et tapez: ESC
:%!xxd -r
pour écrire les modifications que vous avez apportées en mode hexadécimal (n'oubliez pas de sauvegarder après).la source
Il y a beaucoup d'informations dans le manuel en ligne pour chaque commande; Cela vaut toujours la peine d’y jeter un coup d’œil avant d’abandonner et de poser une question.
man echo
explique quelles séquences d'échappement sont autorisées. Voici un extrait.Donc, \ x86 est juste incorrect. il doit être octal et mettre votre chaîne entre guillemets, sinon elle sera interprétée par le shell.
Exemple:
Modifier 1
Comme Ouki m'a rappelé, l' écho est également une commande du shell, de sorte que l'information est dans la page de manuel pour bash,
man bash
; voici la section pertinente. Mais utilisez des guillemets"
autour de votre chaîne pour empêcher le shell d'interpréter les barres obliques inversées.la source
echo
généralement une commande intégrée. Donc, cela dépend du shell que vous utilisez. La valeur par défaut de Linux étantbash
;\xHH
affiche correctement un caractère via sa valeur hexadécimale.