Backspace cancella l'intera riga nel terminale

Oct 24 2020

Ho eseguito SSH in un computer gateway e poi da lì SSH in un altro computer. Ogni volta che faccio clic su backspace l'intera riga viene eliminata ...

L'utilizzo stty -ami dà quanto segue (estratto parziale):

Come puoi vedere, backspace ("^?") È vincolato a erase, quindi mi aspetto di usarlo per cancellare solo un carattere. Tuttavia, per qualche ragione, si comporta come ^ U, dove l'intera riga viene cancellata ... Come puoi vedere sotto, non appena premo backspace, il "^?" il carattere viene inviato e l'intera riga viene eliminata nonostante sia mappata su erasenon kill...

Ci sono molte domande simili già pubblicate, ma nessuna di queste soluzioni funziona qui poiché stty è già associato aerase . (cioè questo )

Sto usando bash.

Risposte

1 KamilMaciorowski Oct 24 2020 at 03:49

L'indizio è dentro intr = ^?. Quando si preme Backspace, la shell riceve SIGINTdal terminale e cancella la riga di comando. Posso facilmente replicare il problema eseguendo stty intr ^?.

Di solito è intr = ^C, il che significa Ctrl+ ctrigger SIGINT. Esegui questo:

stty intr ^C

Appunti:

  • Nel comando precedente puoi digitare ^Cletteralmente come due caratteri: ^e C; sttydovrebbe capire.
  • Per risolvere il Backspaceproblema è sufficiente impostare intrqualsiasi cosa ma ^?. Ad esempio, puoi impostarlo su nulla (indefinito) invocando stty intr ''. ^CDovrebbe comunque essere la tua prima scelta.