Jika saya menggunakan bash shell cli dan menjalankan beberapa program yang tidak segera kembali, maka saya memasukkan beberapa huruf (pada dasarnya mengetik perintah berikutnya sebelum memperhatikan yang sebelumnya tidak selesai) dan input selalu terlihat seperti ini (terutama ketika menggunakan tombol panah atas dan bawah :)
]]A^ or ]]B^
Dan saya bertanya-tanya, apakah input prematur seperti ini 'berbahaya', atau apa arti string yang dikembalikan?
Jawaban:
String ini adalah representasi mentah dari karakter khusus yang Anda ketikkan (seperti rumah, akhir, panah, tab dll ...).
Efek berbahaya mereka dikendalikan oleh perintah yang Anda jalankan, jika menerima input dari terminal, karakter ini akan menjadi bagian dari inputnya.
Jika tidak mengambil input dari terminal, itu seharusnya tidak memiliki efek buruk pada rasa Unix yang saya tahu.
sumber
Beberapa tombol pada keyboard Anda tidak sesuai dengan karakter yang sebenarnya. Misalnya, Asesuai dengan karakter
a
tetapi tombol Updan F1tidak memiliki karakter khusus mereka sendiri. Ketika tombol khusus ditekan, alih-alih mendapatkan satu karakter yang sesuai dengan tombol, terminal menerjemahkan penekanan tombol ke urutan khusus beberapa karakter yang biasanya dimulai dengan karakter pelarian (biasanya ditampilkan sebagai^[
). Misalnya, Upbiasanya menghasilkan urutan^[[A
(yaitu 3 karakter dari satu kunci: escape[
,, danA
).Alasan yang biasanya tidak Anda lihat
^[[A
adalah karena sebagian besar aplikasi konsol cukup pintar untuk menerjemahkan urutan khusus ke dalam perintah yang berguna alih-alih hanya menggemakannya ke konsol. Untuk melakukan ini, mereka mematikan gema bawaan terminal dan melakukan pemrosesan tingkat rendah mereka sendiri. Misalnya, ketikabash
dilihat^[[A
, ¹ menyadari bahwa itu berarti Anda menekan Updan alih-alih menggema^[[A
kembali, ia melakukan banyak hal untuk menghapus apa pun yang Anda ketikkan sejauh ini, ambil perintah sebelumnya yang disimpan dalam riwayat, dan cetaklah sebagai gantinya.Jika Anda melihat
^[[A
ketika Anda menekan Up, itu biasanya berarti bahwa gema terminal dihidupkan dan proses latar depan (yang mengendalikan terminal) tidak melakukan proses khusus yang disebutkan di atas. Ini mungkin karena aplikasi mengabaikan terminal (seperti kebanyakan perintah non-interaktif). Perhatikan bahwa biasanya, shell menempatkan terminal ke mode kanonik dan menyala bergema sebelum menjalankan proses foreground, dan mengembalikan pengaturannya sendiri setelah ia mendapatkan kembali kendali terminal setelah perintah keluar.Gema itu tampaknya tidak berbahaya. Hanya ingat bahwa jika perintah yang berjalan tidak membaca dari terminal, karakter yang Anda hasilkan melalui keyboard mungkin akan berakhir di
bash
antrian input, jadi berhati-hatilah apa yang Anda ketik karena mereka mungkin akan ditafsirkan sebagai perintah normal setelahbash
melanjutkan membaca dari terminal.¹ Ini sebenarnya penyederhanaan berlebihan. Karena urutan spesifik dapat bervariasi berdasarkan jenis terminal, biasanya ada beberapa lapisan perpustakaan abstraksi di antara aplikasi konsol dan terminal itu sendiri. Misalnya,
bash
gunakanreadline
perpustakaan untuk melakukan sebagian besar inputnya.sumber