GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo aplicar la escritura anticipada a la búsqueda del historial de Bash (ctrl-r)?

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 Ctrlr 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 Ctrlh (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.

Relacionado:¿Cómo buscar una base de datos MySQL con campos encriptados?

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... Ctrlr . 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 Ctrlr siendo interpretado como un comando de repintado y me sorprende cada vez que trato de hacer eso en bash ¡y hace algo diferente!


Linux
  1. Cómo borrar el historial de línea de comandos BASH en Linux

  2. Cómo borrar un comando específico del historial de Bash en Linux

  3. ¿Cómo ejecutar un comando en Shell sin guardarlo en el historial? [Consejos para Linux]

  4. Cómo configurar Bash Shell restringido en Linux

  5. CentOS / RHEL:cómo deshabilitar el historial de shell BASH

McFly:un reemplazo para la función de búsqueda de historial de Bash 'Ctrl + R'

Cómo mostrar el historial de Bash sin números de línea

Cómo habilitar la marca de tiempo en el historial de Bash en Linux

Cómo usar el comando Declare en Linux Bash Shell

Uso de la función de historial en Bash Shell en el servidor Ubuntu 16.04 LTS

¿Cómo ejecutar un comando en un script de Shell?