Estoy tratando de conectar mi Rasberry Pi a alguna pantalla usando el bus i2c. Para comenzar, quería escribir manualmente cosas, bytes en particular en un archivo. ¿Cómo se escriben bytes específicos en un archivo? Ya lo leí y pensé que mi problema debería resolverse con algo como esto
echo -n -e \x66\x6f\x6f > byteFileForNow
Sin embargo, cuando abro ese archivo con nano, en lugar de foo veo:
x66x6fx6f
Así que las barras invertidas se escaparon, pero no los bytes en sí. También intenté lo mismo solo sin -e esta vez, por lo que habría esperado ver \ x66 \ x6f \ x6f , pero obtuve lo mismo que antes.
Por lo tanto, el eco se escapa de las barras invertidas, las barras invertidas solo y las barras invertidas independientemente de si se supone que debe hacerlo.
¿Algúna idea de cómo arreglar esto?
Según la página de manual que debería haber hecho lo que estoy buscando.
fuente
bash
manejar\xHH
adecuadamente, pero no todas las conchas lo hacen.Cáscara
En shell puedes usar
printf
:Nota:
%b
- Imprima el argumento asociado mientras interpreta los escapes de barra invertida.Perl
Con perl, es aún más simple:
Pitón
Si tienes instalado Python, prueba el siguiente one-liner:
Pruebas:
fuente
perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'
operl -e 'print pack "H*", "666f6f"'
printf %b '\x66'
no es portátil.printf '\x66'
es un poco más portátil (funciona conksh93
, aún no condash
niyash
).printf '\146\157\157'
oprintf %b '\0146\0157\0157'
sería portátil / estándar.Es posible que esto no responda directamente a la pregunta, pero también puede usarlo
vi
en modo hexadecimal:Abra su archivo y escriba: ESC
:%!xxd
para cambiar al modo hexadecimal.Podrá editar la parte hexadecimal (la parte de texto no se actualizará a medida que cambie la parte hexadecimal).
Cuando haya terminado, presione escapar nuevamente y escriba: ESC
:%!xxd -r
para escribir los cambios que realizó en modo hexadecimal (no olvide guardar después).fuente
Hay mucha información en el manual en línea para cada comando; siempre vale la pena echarle un vistazo antes de rendirse y publicar una pregunta.
man echo
explica qué secuencias de escape están permitidas. Aquí hay un extracto.Entonces \ x86 es simplemente incorrecto. debe ser octal y poner su cadena entre comillas dobles, de lo contrario será interpretada por el shell.
Ejemplo:
Editar 1
Como me recordó Ouki, echo también es un shell incorporado, por lo que la información está en la página del manual para bash
man bash
; Aquí está la sección relevante. Pero use comillas"
alrededor de su cadena para detener el shell que interpreta las barras diagonales.fuente
echo
que generalmente es un comando incorporado. Entonces esto depende del shell que está utilizando. El ser predeterminado de Linuxbash
;\xHH
muestra correctamente un carácter a través de su valor hexadecimal.