Bagaimana beberapa keluaran `cat` dapat mengubah cara karakter unicode diinterpretasikan dalam bash?

2

Ini adalah pertanyaan karena keingintahuan belaka:

Saya memiliki pengaturan PS1 khusus di bash yang hanya direktori saat ini, diikuti oleh lambda huruf kecil ( λ ), mis. . Saya tidak sengaja digunakan cat dengan file biner, membatalkan output, dan kemudian memiliki λ berubah menjadi dua karakter Jepang ホサ selama sisa sesi. Ketika menempelkan karakter ini dari tempat lain, itu juga ditampilkan sebagai dua karakter Jepang ini.

Sekarang pertanyaan saya adalah, bagaimana output dari file biner ini mengubah bagaimana bash menginterpretasikan karakter Unicode?

yerforkferchips
sumber

Jawaban:

5

pertanyaan saya adalah, bagaimana output dari file biner ini mengubah bagaimana bash menginterpretasikan karakter Unicode?

Dukungan terminal Unix standar Perintah ANSI / VT-100 yang dapat mengontrol kursor, warna, dan font. Ketika Anda mengetik file biner ke layar, ada kemungkinan beberapa karakter biner akan secara tidak sengaja mencocokkan kode kontrol tersebut dan mengatur properti terminal Anda.

Untuk mengembalikan terminal Anda ke status default, jalankan:

reset

Contoh urutan kontrol VT-100

Jika Anda ingin teks di terminal berkedip, ketikkan:

echo -e '\E[5m'

Jika Anda ingin mengalihkan tampilan untuk membalikkan video, ketik:

echo -e '\E[7m'

Sebagai contoh yang lebih kompleks, pertimbangkan make perintah yang dapat menghasilkan banyak output. Untuk membuatnya lebih mudah menemukan hal-hal penting, Anda mungkin ingin menyoroti ERR dalam video terbalik saat menampilkan WARNING dalam huruf tebal. Itu kode berikut menambahkan urutan kontrol VT-100 ke output make untuk mendapatkan sorotan ini di terminal:

make 2>&1 | sed -e 's/.*\bERR.*/\x1b[7m&\x1b[0m/i' -e 's/.*\bWARN.*/\x1b[1m&\x1b[0m/i'

Di atas menambahkan urutan kontrol dengan sengaja. Ketika file biner diketik ke layar, tidak ada yang tahu urutan kontrol VT-100 yang akan diaktifkan secara tidak sengaja.

John1024
sumber
Saya berasumsi itu ada hubungannya dengan urutan kontrol, tapi sepertinya saya tidak bisa menemukan urutan kontrol yang mengubah representasi karakter Unicode, juga tidak ada dalam daftar yang Anda tautkan.
yerforkferchips
1
Ada banyak perintah untuk mengubah set karakter. Sebagai sebuah contoh , ESC ( 0 dan ESC ) 0 set "Set Karakter Grafis Khusus". Lebih lanjut tentang kode kontrol untuk mengatur set karakter dapat ditemukan sini . Saya menduga perlu beberapa penggalian melalui definisi font dan file konfigurasi untuk menentukan salah satu dari sekuens ini yang menghasilkan sistem Anda menampilkan lambda sebagai karakter Jepang.
John1024