GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Ctrl+m Dan Ctrl+q Tidak Digunakan Di Pintasan Bash?

Baru-baru ini saya telah meninjau tombol pintasan bash, dan mencoba menemukan yang sesuai untuk kunci aktivasi tmux saya.

Saya merasa menarik bahwa ctrl + m dan ctrl + q tidak digunakan dalam pintasan bash, menurut https://en.wikipedia.org/wiki/Bash_(Unix_shell).

Mengapa mereka tidak digunakan? Saya merasa ctrl + m cukup berguna.

Apakah dua kombinasi ini dimaksudkan oleh desain untuk DIY (define it yourself) penggunaan? Atau ada cerita lain?

Jawaban yang Diterima:

Ctrl+M mengirimkan karakter yang sama (RET) sebagai tombol Enter di terminal. Program tidak memiliki cara untuk membedakannya, sehingga kunci ini tidak dapat dikonfigurasi secara terpisah.

Ctrl+Q sudah digunakan untuk XON secara default, sehingga tidak dapat digunakan oleh Bash, tetapi Anda tetap dapat menggunakannya di tmux, karena tmux menggunakan mode input mentah.

Program GUI dapat membaca dari keyboard, bahwa Tombol m telah ditekan dengan pengubah Ctrl dan menggunakan Ctrl+m sebagai jalan pintas, tetapi shell atau program terminal apa pun menerima kombinasi Ctrl+Tombol seperti karakter ascii dari 0 hingga 26

[email protected] = 0
Ctrl+A = 1
Ctrl+B = 2

dan seterusnya. Anda dapat mencoba ini untuk melihat nilainya

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  n

Untuk memasukkan nilai, tekan Ctrl+v sebelum Ctrl+[a-f] agar tidak ditafsirkan sebagai nilai mentah.

Saat Anda melihat tabel ascii(7) Anda dapat melihat kode kontrol dalam tabel dengan karakter yang sesuai @..Z di sebelah kiri. Misalnya

015   13    0D    CR  'r' (carriage ret)     115   77    4D    M

atau

011   9     09    HT  't' (horizontal tab)   111   73    49    I

Lapisan berikutnya yang menginterpretasikan kode kontrol sebelum bash adalah stty (ubah dan cetak pengaturan terminal)

stty -a
intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

lihat stty(1) untuk mengetahui arti dari lnext atau start dan stop .

Lihat juga readline(3) karena bash dan program cli GNU lainnya menggunakan perpustakaan itu untuk mengontrol jalur input dan tentu saja bash(1) /READLINE, bagian readline dari halaman manual bash.

Terkait:Melampirkan vs. tidak melampirkan nilai variabel dalam tanda kutip di bash?

Catatan:XYZ(NUM) berarti halaman manual XYZ dari bagian NUM, jadi hasil dari man NUM XYZ .


Linux
  1. Linux – Mengapa Kami Menggunakan Su – Dan Bukan Hanya Su?

  2. Apa Env X=() { :;}; Command' Bash Do Dan Mengapa Tidak Aman?

  3. Mengapa Regex Di Bash Hanya Bekerja Jika Itu Adalah Variabel Dan Tidak Secara Langsung??

  1. Mengapa Rm -rf Dan Bukan Rmdir -rf?

  2. Mengapa Deis dan apa itu?

  3. Contoh Bash For Loop dan While Loop

  1. Panduan Bash For Loop dan Contohnya

  2. Menggunakan dan di Bash while loop

  3. Mengapa eval harus dihindari di Bash, dan apa yang harus saya gunakan?