Estou tentando conectar meu Rasberry Pi a algum monitor usando o barramento i2c. Para começar, eu queria escrever manualmente coisas, bytes em particular em um arquivo. Como você escreve bytes específicos em um arquivo? Eu já li esse e achei que meu problema deveria ser resolvido com algo assim
echo -n -e \x66\x6f\x6f > byteFileForNow
No entanto, quando abro esse arquivo com nano, em vez de foo , vejo:
x66x6fx6f
Portanto, as barras invertidas foram escapadas, mas não os bytes em si. Eu também tentei o mesmo apenas sem o ee desta vez, portanto, esperava ver \ x66 \ x6f \ x6f , mas obtive o mesmo de antes.
Portanto, o eco está escapando de barras invertidas, barras invertidas sozinhas e barras invertidas, independentemente de se pretender.
Alguma idéia de como consertar isso?
De acordo com a página de manual que deveria ter feito o que estou procurando.
fonte
bash
manuseie\xHH
corretamente, mas nem todas as conchas o fazem.Concha
No shell você pode usar
printf
:Nota:
%b
- Imprima o argumento associado ao interpretar escapes de barra invertida.Perl
Com o perl, é ainda mais simples:
Pitão
Se você instalou o Python, tente o seguinte recurso:
Testando:
fonte
perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'
ouperl -e 'print pack "H*", "666f6f"'
printf %b '\x66'
não é portátil.printf '\x66'
é um pouco mais portátil (funciona comksh93
, ainda não comdash
nemyash
).printf '\146\157\157'
ouprintf %b '\0146\0157\0157'
seria portátil / padrão.Isso pode não responder diretamente à pergunta, mas você também pode usá-lo
vi
no modo hexadecimal:Abra seu arquivo e digite: ESC
:%!xxd
para alternar para o modo hexadecimal.Você poderá editar a parte hexadecimal (a parte de texto não será atualizada à medida que você altera a parte hexadecimal).
Quando terminar, pressione escape novamente e digite: ESC
:%!xxd -r
para escrever de volta as alterações que você fez no modo hexadecimal (não esqueça de salvar depois).fonte
Há muitas informações no manual on-line para cada comando; sempre vale a pena dar uma olhada nisso antes de desistir e postar uma pergunta.
man echo
explica quais seqüências de escape são permitidas. Aqui está um extrato.Portanto, \ x86 está incorreto. deve ser octal e colocar sua string entre aspas duplas, caso contrário, será interpretada pelo shell.
Exemplo:
Editar 1
Como Ouki me lembrou, echo também é um shell embutido, então as informações estão na página de manual do bash
man bash
; aqui está a seção relevante. Mas use aspas"
em sua string para impedir que o shell interprete as barras invertidas.fonte
echo
geralmente é um comando embutido. Portanto, isso depende do shell que você está usando. O padrão do linux sendobash
;\xHH
está exibindo corretamente um caractere através de seu valor hexadecimal.