Quels sont les raccourcis clavier de la ligne de commande?

10

Je parle des raccourcis clavier que vous utilisez dans la ligne de commande / terminal.

Exemple: Ctrl+ cqui tue le processus, Ctrl+ dcette déconnexion, Ctrl+ zqui envoie le processus en arrière-plan ... etc.

Je l' ai testé quelques - uns et a constaté qu'ils ne sont ni terminal (c. -à- gnome-terminal, xterm, konsole) spécifique ni coquille (c. -à- bash, zsh) spécifique, ils ont même travail à l' ttyart.

Donc, je veux savoir:

  • Qui fournit ces raccourcis?
  • Comment les lister et les modifier / définir?
Pandya
la source
Essayez bind -pd'énumérer, comme help bindpour les autres
Costas

Réponses:

10

Le pilote de terminal du noyau ( termios) interprète les clés spéciales qui peuvent être saisies pour envoyer un signal à un processus, envoyer la fin d'un fichier, effacer des caractères, etc. Il s'agit d'une fonctionnalité de base du noyau Unix et très similaire sur la plupart des implémentations Unix et Linux.

La sttycommande affiche ou définit les termioscaractères spéciaux, ainsi que d'autres paramètres pour le pilote de ligne de terminal.

Appelez stty -apour voir les valeurs actuelles des caractères spéciaux et autres "paramètres de ligne de terminal". Dans les exemples suivants, vous pouvez voir que intrc'est Ctrl+ C, eofest Ctrl+ D, suspest Ctrl+ Z. (J'ai supprimé d'autres sorties pour n'afficher que les paramètres des caractères spéciaux):

stty -a caractères spéciaux sur GNU / Linux:

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;

stty -a caractères spéciaux sur FreeBSD:

cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

Pour changer la valeur d'un caractère spécial, par exemple, pour changer le caractère d'interruption de Ctrl+ Cà Ctrl+ Einvoquer sttycomme ceci ( ^Eest littéralement deux caractères, le circonflexe ( ^) suivi de la lettre E):

stty intr '^E'

Pour plus d'informations, consultez les pages de manuel de sttyet termios. Sur GNU / Linux, vous pouvez également consulter la tty_ioctlpage de manuel.

Remarques:

La intrclé ( Ctrl+ Cpar défaut) ne tue pas réellement le processus, mais oblige le noyau à envoyer un signal d'interruption ( SIGINT) à tous les processus du groupe de processus. Les processus peuvent s'arranger pour intercepter ou ignorer le signal, mais la plupart des processus se termineront, ce qui est le comportement par défaut.

La raison pour laquelle Ctrl+ dvous déconnecte est que le pilote de ligne de terminal envoie EOF (fin de fichier) sur l'entrée standard du shell. Le shell se ferme lorsqu'il reçoit la fin du fichier sur son entrée standard.

RobertL
la source
@Sukminder, sur FreeBSD, l' -aoption POSIX a été ajoutée à stty.
RobertL
J'ai essayé stty intr '^E'cela fonctionne (ensembles) mais temporairement et uniquement pour le terminal / tty actuel. Comment puis-je le changer globalement et définitivement?
Pandya
Je pense que la meilleure façon serait d'invoquer sttydans votre $ HOME / .profile ou $ HOME / .bashrc ou un autre fichier d'initialisation de démarrage du shell.
RobertL
J'ai essayé: cela fonctionne avec le terminal mais aucun effet danstty
Pandya
Qu'avez-vous essayé, que voyez-vous et que voulez-vous dire tty? Peut-être que cela pourrait être une nouvelle question?
RobertL
14

Depuis http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

Raccourcis d'édition de commandes

  • Ctrl+ a- aller au début de la ligne de commande
  • Ctrl+ e- aller à la fin de la ligne de commande
  • Ctrl+ k- supprimer du curseur jusqu'à la fin de la ligne de commande
  • Ctrl+ u- supprimer du curseur au début de la ligne de commande
  • Ctrl+ w- supprimer du curseur au début du mot (c'est-à-dire supprimer un mot en arrière)
  • Ctrl+ y- collez le mot ou le texte qui a été coupé à l'aide de l'un des raccourcis de suppression (comme celui ci-dessus) après le curseur
  • Ctrl+ xx- se déplace entre le début de la ligne de commande et la position actuelle du curseur (et vice-versa)
  • Alt+ b- reculer d'un mot (ou aller au début du mot, le curseur est actuellement sur)
  • Alt+ f- avancer d'un mot (ou aller à la fin du mot, le curseur est actuellement sur)
  • Alt+ d- supprimer à la fin du mot commençant au curseur (mot entier si le curseur est au début du mot)
  • Alt+ c- mettre en majuscule à la fin du mot commençant au curseur (mot entier si le curseur est au début du mot)
  • Alt+ u- mettre en majuscule du curseur à la fin du mot
  • Alt+ l- faire des minuscules du curseur à la fin du mot
  • Alt+ t- permuter le mot actuel avec le précédent
  • Ctrl+ f- avancer d'un caractère
  • Ctrl+ b- reculer d'un caractère
  • Ctrl+ d- supprimer le caractère sous le curseur
  • Ctrl+ h- supprimer le caractère avant le curseur
  • Ctrl+ t- permuter le caractère sous le curseur avec le précédent

Raccourcis de rappel de commande

  • Ctrl+ r- rechercher l'historique à l'envers
  • Ctrl+ g- échapper au mode de recherche historique
  • Ctrl+ p- commande précédente dans l'historique (c'est-à-dire revenir en arrière dans l'historique des commandes)
  • Ctrl+ n- prochaine commande dans l'historique (c.-à-d. Avancer dans l'historique des commandes)
  • Alt+ .- utilise le dernier mot de la commande précédente

Raccourcis de contrôle des commandes

  • Ctrl+ l- effacez l'écran
  • Ctrl+ s- arrête la sortie à l'écran (pour une commande prolixe de longue durée)
  • Ctrl+ q- autoriser la sortie à l'écran (si précédemment arrêté à l'aide de la commande ci-dessus)
  • Ctrl+ c- terminer la commande
  • Ctrl+ z- suspendre / arrêter la commande

Commandes Bash Bang (!)

Bash a également quelques fonctionnalités pratiques qui utilisent le! (bang) pour vous permettre de faire des trucs géniaux avec les commandes bash .

  • !! - exécuter la dernière commande
  • ! blah - exécute la commande la plus récente qui commence par 'blah' (par exemple! ls)
  • ! blah: p - affiche la commande que ! blah exécuterait (l'ajoute également comme la dernière commande de l'historique des commandes)
  • ! $ - le dernier mot de la commande précédente (identique à Alt +. )
  • ! $: p - imprime le mot que ! $ remplacerait
  • ! * - la commande précédente à l'exception du dernier mot (par exemple, si vous tapez ' find some_file.txt / ', alors ! * Vous donnera ' find some_file.txt ')
  • ! *: p - imprimer quoi ! * remplacerait
Jesus Cepeda
la source
1
@Sukminder Non, Ctrl + S arrête la sortie. Vous semblez le confondre avec Ctrl + Z.
Gilles 'SO- arrête d'être méchant'
Voir aussi: Emacs.
Erich
Agréable! Et existe-t-il un moyen d'atteindre le ^U, qui stty -amontre défini pour SIGKILL sur Linux, à partir de bash? De préférence sans indéfinir le contenu de la ligne de lecture (peut-être via une troisième touche mod / méta). Je suppose qu'il n'est masqué que par la liaison readline ctrl + u?
nyov