Alcuni tasti della tastiera non corrispondono a caratteri reali. Ad esempio, Acorrisponde al personaggio a
ma i tasti Upe F1non hanno i loro caratteri dedicati. Quando vengono premuti quei tasti speciali, invece di ottenere un singolo carattere corrispondente al tasto, il terminale traduce il tasto premuto in una sequenza speciale di più caratteri che in genere iniziano con il carattere di escape (solitamente visualizzato come ^[
). Ad esempio, di Upsolito genera la sequenza ^[[A
(ovvero 3 caratteri da un tasto: escape [
, e A
).
Il motivo che normalmente non si vede ^[[A
è perché la maggior parte delle applicazioni della console sono abbastanza intelligenti da tradurre le sequenze speciali in comandi utili invece di farle eco nella console. Per fare ciò, disattivano l'eco integrata del terminale ed eseguono la propria elaborazione di livello inferiore. Ad esempio, quando bash
vede ^[[A
, ¹ capisce che significa che hai premuto Upe invece di echeggiare ^[[A
, fa un sacco di cose per eliminare tutto ciò che hai digitato finora, recuperare il comando precedente salvato nella cronologia e stamparlo invece.
Se vedi ^[[A
quando premi Up, ciò significa in genere che l'eco del terminale è attivata e il processo in primo piano (quello che controlla il terminale) non sta eseguendo alcuna delle elaborazioni speciali sopra menzionate. Ciò può essere dovuto al fatto che l'applicazione ignora semplicemente il terminale (come la maggior parte dei comandi non interattivi). Si noti che in genere la shell mette il terminale in modalità canonica e attiva l'eco prima di eseguire un processo in primo piano e ripristina le proprie impostazioni una volta che riprende il controllo del terminale dopo la chiusura del comando.
L'eco sembra abbastanza innocuo. Ricorda solo che se il comando in esecuzione non legge dal terminale, i caratteri che hai generato tramite la tastiera finiranno probabilmente nella bash
coda di input, quindi fai attenzione a ciò che scrivi poiché probabilmente verranno interpretati come comandi normali una volta che bash
riprendono a leggere dal terminal.
¹ Questa è in realtà una semplificazione eccessiva. Poiché la sequenza specifica può variare in base al tipo di terminale, in genere ci sono più livelli di librerie di astrazione tra un'applicazione console e il terminale stesso. Ad esempio, bash
utilizza la readline
libreria per eseguire la maggior parte del suo input.