Ctrl + 4 invia ^ \
I terminali inviano caratteri (o più precisamente byte), non chiavi. Quando viene premuto un tasto che rappresenta un carattere stampabile, il terminale invia quel carattere all'applicazione. La maggior parte dei tasti funzione sono codificati come sequenze di escape: sequenze di caratteri che iniziano con il numero di carattere 27. Alcuni tasti della forma Ctrl+ charactere alcuni tasti funzione vengono inviati come caratteri di controllo - nel set di caratteri ASCII , che tutti i computer moderni utilizzare come base (Unicode, ISO latino- n, ecc. sono tutti superset di ASCII), 33 caratteri sono caratteri di controllo: caratteri da 0 a 31 e 127. I caratteri di controllo non sono stampabili, ma intendono avere un effetto nelle applicazioni; per esempio il carattere 10, che è Control-J (comunemente scritto ^ J), è un carattere di nuova riga, quindi quando un terminale visualizza quel carattere, sposta il cursore sulla riga successiva, anziché visualizzare un glifo. Il carattere di escape stesso è un carattere di controllo, ^ [(valore 27).
Non ci sono abbastanza personaggi di controllo per coprire tutti i Ctrl+ charactertasti. Solo le lettere e i caratteri @[\]^_?
hanno un carattere di controllo corrispondente. Quando premi Ctrl+ 4o Ctrl+ $(che presumo sia Ctrl+ Shift+ 4), il terminale deve scegliere qualcosa da inviare. A seconda del terminale e della sua configurazione, ci sono diverse possibilità comuni:
- Il terminale ignora il Ctrlmodificatore e invia il carattere
4
o $
.
- Il terminale invia una sequenza di escape che codifica il tasto esatto e i modificatori che sono stati premuti.
- Il terminale invia qualche altro carattere di controllo.
Molti terminali inviano caratteri di controllo per alcuni tasti nella riga delle cifre:
- Ctrl+ 2→ ^ @
- Ctrl+ 3→ ^ [
- Ctrl+ 4→ ^ \
- Ctrl+ 5→ ^]
- Ctrl+ 6→ ^^
- Ctrl+ 7→ ^ _
- Ctrl+ 8→ ^?
Non so dove sia nata questa particolare convenzione.
Ctrl+ |invia lo stesso carattere perché è Ctrl+ Shift+ \e il terminale invia ^ \ indipendentemente dalla pressione del tasto Maiusc.
^ \ esce
Il terminale stesso (più precisamente, il supporto generico del terminale nel kernel) interpreta in modo speciale alcuni caratteri di controllo. Questa interpretazione può essere configurata per mappare caratteri diversi o disattivata da applicazioni che vogliono elaborare i caratteri da soli. Una tale interpretazione ben nota è che ^ M, il carattere inviato dal Returntasto, invia la linea corrente all'applicazione, se il terminale è in modalità di cottura , in cui le applicazioni ricevono input riga per riga.
Alcuni caratteri inviano segnali in primo piano all'applicazione. ^ C invia il segnale di interruzione (SIGINT), che convenzionale dice all'applicazione di interrompere ciò che sta facendo e di leggere il prossimo comando dell'utente. Le applicazioni non interattive di solito escono. ^ \ invia il segnale di uscita (SIGQUIT), che in modo convenzionale dice all'applicazione di uscire il prima possibile senza salvare nulla; molte applicazioni non sovrascrivono il comportamento predefinito, ovvero uccidere immediatamente l'applicazione¹. Pertanto, quando si preme Ctrl+ 4(o qualsiasi cosa che invii il carattere ^ \) in cat
o bc
, nessuna delle quali ignora il comportamento predefinito, l'applicazione viene interrotta.
Il terminale stesso stampa la ^\
parte del messaggio: è una rappresentazione visiva del personaggio che hai digitato, e il terminale è in modalità di cottura e con l'eco attivata (i caratteri vengono visualizzati dal terminale non appena li digiti, al contrario di modalità non eco in cui i caratteri vengono inviati solo all'applicazione, che può o meno scegliere di visualizzarli). La Quit
parte proviene da bash: nota che il suo processo figlio è morto a causa di un segnale di uscita, e questo è il suo modo di farti sapere.
Le shell gestiscono tutti i segnali comuni, quindi se si digita ^ \ in una shell, non si uccide la sessione, si ottiene semplicemente un nuovo prompt, come ^ C.
Puoi giocare con le impostazioni del terminale con il stty
comando.
¹ E tradizionalmente genera un dump core , ma oggigiorno molti sistemi lo disabilitano di default.