¿Cuáles son los atajos de teclado para la línea de comandos?

10

Estoy hablando de los atajos de teclado que usas en la línea de comandos / terminal.

Ejemplo: Ctrl+ cque mata el proceso, Ctrl+ dque cierra la sesión, Ctrl+ zque envía el proceso al fondo ... etc.

He probado algunos y encontré que no son ni terminal (es decir gnome-terminal, xterm, konsole) específico ni cáscara (es decir bash, zsh) específico, que incluso trabajo en ttys.

Entonces, quiero saber:

  • ¿Quién proporciona estos atajos?
  • ¿Cómo puedo enumerarlos y modificarlos / definirlos?
Pandya
fuente
Intenta bind -phacer una lista, help bindpara otros
Costas

Respuestas:

10

El controlador de terminal del núcleo ( termios) interpreta las teclas especiales que se pueden escribir para enviar una señal a un proceso, enviar el final del archivo, borrar caracteres, etc. Esta es la funcionalidad básica del núcleo de Unix y muy similar en la mayoría de las implementaciones de Unix y Linux.

El sttycomando muestra o establece los termioscaracteres especiales, así como otros parámetros para el controlador de línea de terminal.

Invoque stty -apara ver los valores actuales de los caracteres especiales y otras "configuraciones de línea de terminal". En los siguientes ejemplos, puede ver que intres Ctrl+ C, eofes Ctrl+ D, suspes Ctrl+ Z. (He eliminado otra salida para mostrar solo la configuración de caracteres especiales):

stty -a caracteres especiales en 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 caracteres especiales en 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;

Para cambiar el valor de un carácter especial, por ejemplo, para cambiar el carácter de interrupción de Ctrl+ Ca Ctrl+ Einvocar de sttyesta manera ( ^Ees literalmente dos caracteres, el circunflejo ( ^) seguido de la letra E):

stty intr '^E'

Para obtener más información, consulte las páginas de manual para sttyy termios. En GNU / Linux también puede mirar la tty_ioctlpágina de manual.

Notas:

La intrclave ( Ctrl+ Cpor defecto), en realidad no mata el proceso, pero hace que el núcleo envíe una señal de interrupción ( SIGINT) a todos los procesos dentro del grupo de procesos. Los procesos pueden hacer arreglos para capturar o ignorar la señal, pero la mayoría de los procesos finalizarán, que es el comportamiento predeterminado.

La razón por la que Ctrl+ dcierra la sesión es porque el controlador de línea de terminal envía EOF (final del archivo) en la entrada estándar del shell. El shell sale cuando recibe el final del archivo en su entrada estándar.

RobertL
fuente
@Sukminder, en FreeBSD, -ase agregó la opción POSIX stty.
RobertL
Lo he intentado stty intr '^E'funciona (establece) pero temporalmente y solo para el terminal / tty actual. ¿Cómo lo cambio global y permanentemente?
Pandya
Creo que la mejor manera sería invocar sttyen su $ HOME / .profile o $ HOME / .bashrc o algún otro archivo de inicialización de inicio de shell.
RobertL
Lo he intentado: funciona con terminal pero no tiene efecto entty
Pandya
¿Qué probaste, qué ves y a qué te refieres tty? Tal vez esa podría ser una nueva pregunta?
RobertL
14

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

Atajos de edición de comandos

  • Ctrl+ a- ir al inicio de la línea de comando
  • Ctrl+ e- ir al final de la línea de comando
  • Ctrl+ k- eliminar del cursor al final de la línea de comando
  • Ctrl+ u- eliminar del cursor al inicio de la línea de comando
  • Ctrl+ w- eliminar del cursor al inicio de la palabra (es decir, eliminar una palabra hacia atrás)
  • Ctrl+ y: Pegue la palabra o el texto que se cortó con uno de los atajos de eliminación (como el anterior) después del cursor
  • Ctrl+ xx- moverse entre el inicio de la línea de comando y la posición actual del cursor (y de nuevo)
  • Alt+ b- retroceder una palabra (o ir al inicio de la palabra en la que está actualmente el cursor)
  • Alt+ f: Avanzar una palabra (o ir al final de la palabra en la que está actualmente el cursor)
  • Alt+ d- eliminar al final de la palabra que comienza en el cursor (palabra completa si el cursor está al comienzo de la palabra)
  • Alt+ c- capitalizar hasta el final de la palabra que comienza en el cursor (palabra completa si el cursor está al comienzo de la palabra)
  • Alt+ u- hacer mayúsculas desde el cursor hasta el final de la palabra
  • Alt+ l- hacer minúsculas desde el cursor hasta el final de la palabra
  • Alt+ t- intercambia la palabra actual con la anterior
  • Ctrl+ f- avanza un personaje
  • Ctrl+ b- retrocede un personaje
  • Ctrl+ d: Eliminar el carácter debajo del cursor
  • Ctrl+ h- borra el caracter antes del cursor
  • Ctrl+ t- intercambia el carácter debajo del cursor con el anterior

Atajos de recuperación de comandos

  • Ctrl+ r- busca el historial al revés
  • Ctrl+ g- escapar del modo de búsqueda del historial
  • Ctrl+ p- comando anterior en el historial (es decir, volver al historial de comandos)
  • Ctrl+ n- siguiente comando en el historial (es decir, avanzar por el historial de comandos)
  • Alt+ .- usa la última palabra del comando anterior

Atajos de control de comando

  • Ctrl+ l- borrar la pantalla
  • Ctrl+ s- detiene la salida a la pantalla (para el comando detallado de ejecución prolongada)
  • Ctrl+ q- permite la salida a la pantalla (si se detuvo previamente usando el comando anterior)
  • Ctrl+ c- termina el comando
  • Ctrl+ z- suspender / detener el comando

Comandos Bash Bang (!)

¡Bash también tiene algunas funciones útiles que usan! (explosión) para permitirle hacer algunas cosas funky con comandos bash .

  • !! - ejecuta el último comando
  • ! blah : ejecuta el comando más reciente que comienza con 'blah' (por ejemplo,! ls)
  • ! blah: p - imprime el comando que se ejecutará ! blah (también lo agrega como el último comando en el historial de comandos)
  • ! $ : La última palabra del comando anterior (igual que Alt +. )
  • ! $: p - imprime la palabra que ! $ sustituiría
  • ! * : El comando anterior, excepto la última palabra (por ejemplo, si escribe ' find some_file.txt / ', entonces ! * Le daría ' find some_file.txt ')
  • ! *: p - imprime qué ! * sustituiría
Jesus Cepeda
fuente
1
@Sukminder No, Ctrl + S detiene la salida. Parece confundirlo con Ctrl + Z.
Gilles 'SO- deja de ser malvado'
Ver también: Emacs.
Erich
¡Agradable! ¿Y hay una manera de llegar a ^U, que se stty -amuestra definido para SIGKILL en Linux, desde bash? Preferiblemente sin definir las cosas de la línea de lectura (quizás a través de un tercer mod / meta key). Supongo que solo está sombreado por el enlace de línea de lectura ctrl + u?
nyov