Effacer / effacer un mot de passe invisible mal orthographié sur un shell / terminal sous Linux

75

Une chose qui me dérange en utilisant le terminal de Linux est quand je dois taper un mot de passe invisible, comme lorsque vous exécutez ssh . Parfois, je me trompe dans une ou plusieurs lettres, puis je dois appuyer plusieurs fois sur la touche Retour pour m'assurer que j'ai tout effacé pour recommencer.

Je sais que ce n'est pas grave, mais depuis l'autre jour, j'ai découvert qu'en appuyant sur CTRL + L, "efface" le terminal, je me demandais s'il y avait un moyen d'effacer / effacer le mot de passe invisible sans s'appuyer sur la touche Retour arrière ou sur la touche Entrée. réessayer.

StackUnder
la source

Réponses:

70

Vous devez juste taper ctrl+ u.

Profitez =)

Gilles Quenot
la source
Jamais su à ce sujet. Habituellement, je me contenterais de ctrl + C à partir d'une commande non désirée en cours de frappe.
Spidey
10
Voir mon explication dans l'autre réponse si vous voulez savoir ce qui se passe.
Jim Paris
J'utilise Ctrl + W et assez bien avec elle.
Shabunc
108

Je sais que cela a déjà été répondu, mais la réponse n'explique pas ce qui se passe.

Les caractères comme Ctrl+ Lsont gérés par l' application . Dans le cas d'une entrée dans le shell, comme bash, cela efface l'écran. Certaines applications, par exemple emacs, l'utilisent pour redessiner l'écran et / ou recentrer le curseur.

Les caractères tels que Ctrl+ Uà l'invite du mot de passe sont gérés par la discipline de ligne TTY . Ils fonctionneront chaque fois que le terminal d'entrée est en mode d'édition de ligne "canonique", mode utilisé par vos programmes lorsque vous entrez un mot de passe. Dans ce mode, c'est le noyau Linux lui-même qui interprète ces caractères. Vous pouvez voir quelles fonctions sont affectées à quelles touches dans la sortie de stty -a:

speed 38400 baud; rows 45; columns 128; line = 0;
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; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Ici, vous pouvez voir que le Ctrl+ Uest lié à killce qui (selon la page de manuel stty ) "effacera la ligne en cours". Vous pouvez également utiliser sttypour changer ce mappage:

stty kill ^E   # make ctrl-e erase the line

Cette page contient de nombreuses informations utiles sur la couche TTY si vous êtes intéressé.


Si les choses ne vous ont pas suffisamment embrouillé: lorsque bashvous êtes à la pointe d'une interaction , vous n'êtes en fait pas en mode d'édition de ligne "canonique". Au lieu de cela, bashreçoit chaque caractère directement au fur et à mesure que vous le tapez, et interprète les séquences de contrôle elles-mêmes, via la bibliothèque readline . Cette bibliothèque sera l' honneur les applications que vous avez défini sur votre terminal, cependant, de sorte que vous pouvez toujours utiliser sttyles changer. Ou, vous pouvez les personnaliser indépendamment dans d’ bashautres programmes basés sur readline en définissant la unix-line-discardpropriété dans votre ~/.inputrcfichier. Voir la page de manuel bash pour plus d'informations.

Lorsque vous exécutez un programme, bashréactivez le mode d'édition de ligne canonique ( stty icanon) s'il était activé auparavant, puis désactivez-le à nouveau lorsque le programme se termine ( stty -icanon).

Jim Paris
la source
Merci, cela m'a aidé à retracer et à résoudre mon problème 'effacer' de tilda / yay!
Thomas Hesse