Mengapa ^ C, ^ V dll muncul di terminal ketika saya menggunakan pintasan keyboard Ctrl + karakter?

26

Terkadang, saat menyalin-menempelkan teks dari output perintah, saya tidak sengaja akan menggunakan Ctrl+ calih-alih Ctrl+ Shift+ c.

Jadi baris perintah mengartikannya sebagai ^C...

Kenapa ini? Mengapa baris perintah menginterpretasikan controlinput ^?

TellMeWhy
sumber

Jawaban:

35

Itu tidak benar-benar memasukkan urutan karakter "^ C". Ini hanya representasi untuk karakter kontrol ASCII yang tidak dapat dicetak, seperti:

  • ^C → ETX (Akhir teks, mengirim sinyal bunuh), ASCII 0x03
  • ^D → EOT (Akhir transmisi, mengakhiri input), ASCII 0x04
  • ^H→ BS (Backspace, \b), ASCII 0x08
  • ^J→ LF (Umpan baris, \n), ASCII 0x0A
  • ^L → FF (Umpan form, halaman baru, membersihkan terminal), ASCII 0x0C
  • ^M→ CR (Carriage return, \r), ASCII 0x0D

Ini hanya ekstrak kecil dari karakter kontrol ASCII yang mungkin yang dapat dimasukkan menggunakan keyboard; Anda dapat menemukan daftar lengkapnya di sini .

Saya pikir yang paling penting untuk diingat adalah Ctrl+ C, Ctrl+ Ddan Ctrl+ L.

s3lph
sumber
Penggunaan tanda sisipan ^sebagai simbol untuk "kontrol" tanggal kembali ke masa pra-grafis ketika terminal hanya teks, dan saya percaya bahkan sebelum itu ketika kita memiliki kartu dan kertas, tidak ada terminal. Saya ingin tahu mengapa tanda sisipan dipilih sebagai simbol.
Paddy Landau
8

Karena CTRL+ KEYkombo ditafsirkan oleh terminal sebagai karakter ASCII yang tidak dapat dicetak, dan sebagai karakter yang tidak dapat dicetak, Anda memerlukan cara untuk mewakilinya.

Konvensi, yang berasal dari terminal VT dengan dukungan ANSI , adalah untuk mewakili CTRL+ KEYkombo yang mewakili CTRLdengan tanda sisipan ( ^) dan KEYdengan KEY.

kos
sumber
5

Saat menyalin dan menempel ke / dari terminal, adalah praktik terbaik untuk menggunakan jalan pintas Ctrl+ Insertdan Shift+ Insertmasing-masing.

Ini adalah jalan pintas yang lebih tradisional untuk digunakan terminal, meskipun Anda akan perhatikan bahwa dalam lingkungan X grafis Ctrl+ Insertdan Shift+ Insertterikat sama Ctrl+ Cdan Ctrl+ V.

Di sebagian besar terminal Ctrl+ C(diwakili oleh ^C) digunakan untuk menghentikan eksekusi suatu proses, maka menyisipkan dengan jalan pintas itu tidak akan berhasil.

Untuk menyalin dan menempelkan dengan cepat, Anda dapat memanfaatkan buffer utama X dengan menyorot teks apa pun yang ingin Anda salin, dan kemudian mengklik tengah tempat Anda ingin menempelkannya. Tidak perlu keyboard.

Keefer Rourke
sumber
2
Maaf, tapi Anda salah paham pertanyaannya. OP ingin tahu mengapa string ^Catau yang serupa muncul saat menekan CTRL + C (atau CTRL + huruf lain). Ini bukan tentang bagaimana cara menyalin dan menempel dengan benar di terminal, yang jawabannya sangat bagus.
Byte Commander
@ByteCommander, benar Anda! saya minta maaf, saya akan meninggalkan jawaban saya apa adanya, karena sepertinya pertanyaan sudah dijawab dengan benar :) Seseorang mungkin menemukan ini dan menemukan apa yang saya tulis bermanfaat.
Keefer Rourke
-2

Anda harus menggunakan Ctrl+ Cdan bukan Shift+ Ctrl+ C, karena pada baris perintah, mereka melakukan hal yang sama (dan Ctrl+ Clebih mudah daripada Shift+ Ctrl+ C). Itu mungkin tidak benar dalam lingkungan grafis tertentu di mana GUI menangkap beberapa penekanan tombol dan melakukan sesuatu yang istimewa, tetapi jika penekanan tombol benar-benar dikirim ke baris perintah, maka tidak ada perbedaan. Inilah sebabnya mengapa menekan Ctrl+ Cdapat menunjukkan ^ C sebagai huruf kapital C, bukan huruf kecil C. Baris perintah tidak membedakan mana yang Anda tekan (dan huruf besar mungkin dianggap lebih mudah dibaca). Ini berlaku untuk surat; untuk karakter lain, Shiftmungkin berpengaruh.)

Menekan Ctrl- Cmengirimkan kode ASCII yang 64 di bawah posisi huruf besar dalam tabel ASCII (dan 96 kurang dari posisi huruf kecil dalam tabel ASCII). Jadi menekan Ctrl- c(huruf kecil) mengirimkan kode ASCII 3 (yang 64 kurang dari Ckode ASCII modal 67). Di banyak lingkungan, Anda dapat menahan Altdan kemudian menekan 3numpad (dan kemudian lepaskan 3tombol, dan kemudian lepaskan Alttombol) dan Anda mungkin mendapatkan efek yang sama.

Mengenai ^ C, ^ hanyalah singkatan yang terkenal untuk Ctrlkunci " ". Demikian pula, M- adalah singkatan untuk Altkunci " ". Err, yeah. M singkatan dari kata "Meta", yang dapat dimasukkan dengan memegang Altdan menekan apa pun yang terjadi berikutnya, atau kadang-kadang dengan menekan Esc(dan melepaskan Esc) dan kemudian menekan apa pun yang datang berikutnya. Artikel Wikipedia tentang "Kunci Kontrol": "Notasi" menggambarkan ini sebagai "Notasi tradisional". Ini juga dikenal sebagai Caret Notation ( artikel Wikipedia tentang notasi Caret , Unix StackExchange: pertanyaan ryvnf tentang Caret Notation ).

Mengenai pertanyaan terakhir, shell perintah tidak "menafsirkan" apa pun menjadi tanda sisipan. Dengan kata lain, cangkang tidak membaca apa-apa, dan percaya bahwa itu adalah tanda sisipan. Apa yang terjadi adalah bahwa shell menggunakan notasi tanda kurung terkenal untuk output. Sebagai contoh lain, Anda dapat melihat pager terkenal, "kurang", menggunakan notasi tanda sisipan dengan menjalankan:dd if=/dev/zero bs=64 count=1 | less

(Editor teks "nano" juga menggunakan notasi tanda sisipan dalam bantuan daringnya, termasuk layar penuh bantuan online yang ditampilkan setelah menekan ^ G, alias Ctrl- g.)

TOOGAM
sumber
4
DevRobot secara khusus bertanya tentang penggunaan Ctrl-C (atau lebih tepatnya Shift-Ctrl-C) dalam konteks salin dan tempel, yang menyiratkan terminal GUI. Anda tidak selalu salah, tetapi penjelasan Anda jelas membingungkan bagi seseorang yang datang dari perspektif pengguna GUI.
RM