Contexto
Escribir anticipadamente en bash:bueno
Cuando un shell bash está ocupado (inicializando, ejecutando un comando), uno puede escribir antes de que aparezca el siguiente mensaje .
Si el shell ha iniciado un programa, ese programa capturará las claves, pero si no se ejecuta ningún programa o si el programa no captura la entrada, lo que se escribe se inserta en el shell después de que aparezca el mensaje.
Por ejemplo:escriba sleep 5
, presiona Enter, luego escribe ls
y presione Entrar. ls
se ejecutará después de que termine la suspensión. En la vida real, ls
sería reemplazado por cp
, rsync
o muchos otros programas.
Esta es una característica típica de escritura anticipada y es un gran ahorro de tiempo cuando sabe de antemano qué escribir.
También es muy bueno ya que permite copiar y pegar varios comandos y hacer que se ejecuten en secuencia.
El caso de uso del mundo real incluye cuando el shell tarda en inicializarse. Podría ser que la computadora esté ralentizada por algún motivo, o que el shell esté en un enlace de red lento, etc.
Búsqueda de historial en bash:buena
En un indicador de bash, uno puede escribir Ctrl-R
para buscar en el historial.
Este es un ahorro de tiempo invaluable cuando se reutilizan algunas líneas de comando antiguas, o incluso secuencias de líneas de comando. Presiona Ctrl-R
, escriba algunos caracteres típicos del comando a buscar, presione Ctrl-O
tantas veces como sea necesario para reproducir los comandos grabados desde allí.
Escriba anticipadamente en la búsqueda del historial:¿cómo?
Sin embargo, hay una limitación. A menudo uso la secuencia anterior y descubro que si escribo, p. Ctrl-R ls
antes de que aparezca el indicador de shell, el Ctrl-R
la parte se ignora pero el ls
se muestra la parte.
El efecto neto es que uno tiene que esperar a que aparezca el indicador de shell antes de escribir Ctrl-R
, derrotando parte del tiempo ahorrado.
Pregunta
¿Hay alguna manera de tener Ctrl-R
honrado incluso en una situación de escritura anticipada?
Respuesta aceptada:
Su Ctrl –r está siendo interceptado por el motor de procesamiento de línea con cookies del terminal basado en kernel.
Mientras sleep
se está ejecutando, la terminal está en modo cocido, lo que significa que el editor de líneas tty basado en el kernel está funcionando. El editor de línea tty admite la edición de línea de comando rudimentaria. La tecla de borrado (generalmente establecida en Ctrl –h (retroceso) o Supr ) y la tecla de matar (generalmente Ctrl-U ) son las teclas de edición especiales más conocidas que se pueden utilizar en este modo. Este editor de líneas es útil:es lo que permite que las utilidades interactivas que no usan readline ni curses lean líneas completas de entrada desde la terminal mientras permiten al usuario hacer correcciones de escritura.
Pero hay otra tecla especial que está activa en este modo. Puede verlo junto con otras configuraciones clave en la salida de stty -a
bajo el nombre rprnt
y su configuración predeterminada es... lo has adivinado... Ctrl –r . La función de esta tecla es volver a pintar la línea de comando actual, en caso de que se haya dañado o desalineado debido a otra salida del terminal.
Para evitar esto, puede deshabilitar la función con stty rprnt undef
.
Personalmente estoy acostumbrado a Ctrl –r siendo interpretado como un comando de repintado y me sorprende cada vez que trato de hacer eso en bash
¡y hace algo diferente!