I'm mencoba untuk menghubungkan raspberry Pi ke beberapa tampilan menggunakan i2c bus. Untuk memulai saya ingin secara manual menulis hal-hal, byte khususnya untuk file. https://unix.stackexchange.com/questions/55767/how-do-you-write-specific-bytes-to-a-file Saya sudah baca yang satu dan saya pikir saya masalah yang harus dipecahkan oleh sesuatu seperti ini
echo -n -e \x66\x6f\x6f > byteFileForNow
Namun, ketika saya membuka file dengan nano, bukan foo aku melihat:
x66x6fx6f
Jadi garis miring terbalik yang melarikan diri, tapi bukan byte diri mereka sendiri. Saya juga mencoba yang sama hanya tanpa -e saat ini, jadi saya akan've exepected untuk melihat \x66\x6f\x6f, tapi ada yang sama seperti sebelumnya.
Begitu gema melarikan diri garis miring terbalik, garis miring terbalik sendirian dan garis miring terbalik terlepas dari apakah itu seharusnya. Tahu bagaimana untuk memperbaiki ini? Menurut pria-halaman yang harus've melakukan apa yang saya'm cari.
Anda harus mengambil kode anda ke kutipan:
echo -n -e '\x66\x6f\x6f' > byteFileForNow
sebab jika tidak, shell menggantikan \x
untuk x
sebelum ia pergi ke echo -e
.
ps. double melarikan diri juga akan bekerja:
echo -n -e \\x66\\x6f\\x6f > byteFileForNow
Di shell anda dapat menggunakan printf
:
printf "%b" '\x66\x6f\x6f' > file.bin
Catatan: %b
- Print yang terkait argumen sementara menafsirkan backslash lolos.
Dengan perl, hal ini bahkan lebih sederhana:
perl -e 'print pack("ccc",(0x66,0x6f,0x6f))' > file.bin
Jika anda've Python terinstal, coba yang berikut ini satu-liner:
python -c $'dari struct impor pack\nwith terbuka("file.bin", "wb") sebagai f: f.menulis(pack("<bbb", *bytearray([0x66, 0x6f, 0x6f])))'
Pengujian:
$ hexdump file.bin
0000000 66 6f 6f
Ini mungkin tidak menjawab langsung pertanyaan, tetapi anda juga dapat menggunakan vi
dalam mode hex:
Buka file anda dan ketik:
ESC :%!xxd
untuk beralih ke mode hex.
Anda akan dapat mengedit hex bagian (bagian teks tidak akan diperbarui ketika anda mengubah hex bagian).
Ketika anda selesai hit melarikan diri lagi dan ketik:
ESC :%!xxd -r
untuk menulis kembali perubahan yang anda lakukan dalam mode hex (don't lupa untuk menyimpan sesudahnya).
Ada's banyak informasi di online manual untuk setiap perintah; hal ini selalu layak memiliki melihat bahwa sebelum menyerah dan posting pertanyaan.
pria echo
yang menjelaskan escape sequences yang diizinkan. Berikut ini's ekstrak.
Jika -e adalah efek, berikut urutan yang diakui:
\0NNN karakter dan kode ASCII adalah NNN (oktal)
\ backslash
\a alert (BEL)
\b backspace
\c tidak menghasilkan output lebih lanjut
\f bentuk pakan
\n baris baru
\r carriage return
\t tab horizontal
\v vertical tab
Jadi \x86 adalah salah. itu harus oktal dan menempatkan string dalam tanda kutip ganda, jika tidak maka akan ditafsirkan oleh shell.
Contoh:
$ echo -e -n "\033\07\017" >tf
$ od -c tf
0000000 033 \a 017
0000003
Edit 1
Sebagai Ouki mengingatkan saya, gema juga shell builtin, sehingga informasi yang ada di halaman manual untuk bash, man bash
; di sini's bagian yang relevan. Tapi menggunakan tanda kutip "
sekitar string anda untuk menghentikan shell menafsirkan kembali garis miring.
echo [-neE] [argumen ...] Output args, dipisahkan oleh spasi, diikuti dengan baris baru. Kembalinya status selalu 0. Jika -n ditentukan, baris baru mengikuti ditekan. Jika opsi-e diberikan, interpretasi berikut backslash-karakter melarikan diri diaktifkan. Opsi-E jika penafsiran ini melarikan diri karakter, bahkan pada sistem di mana mereka ditafsirkan secara default. Yang xpg_echo pilihan shell dapat digunakan untuk secara dinamis menentukan apakah atau tidak echo memperluas ini melarikan diri karakter secara default. echo tidak menafsirkan -- untuk berarti akhir dari pilihan-pilihan. echo menafsirkan berikut escape sequences: \a alert (bell) \b backspace \c menekan keluaran lanjut \e melarikan diri karakter \f bentuk pakan \n baris baru \r carriage return \t tab horizontal \v vertical tab \ backslash \0nnn delapan-bit karakter dan nilai nilai oktal zero (nol tiga oktal menggali‐ its) \xHH delapan-bit karakter dan nilai nilai heksadesimal HH (satu atau dua hex menggali‐ its)