De acuerdo con ladocumentos GNU, hay un personajeVREPRINT
, o rprnt
, que se supone que vuelve a imprimir el búfer de entrada del editor de líneas del shell. Esto puede ser útil si algo como un proceso en segundo plano se ha escrito en el PTY mientras escribe otro comando y hay resultados intercalados con su entrada. Sin embargo, intenté usarlo y parece que no tiene ningún efecto. Hice lo siguiente:
- Ejecute una
sh
sesión con laalpine
imagen más reciente de Dockerhub. - Úselo
stty
para vincular elrprnt
personaje a^N
. - Escribe alguna entrada
- Desde una sesión separada, escriba al PTY de la primera sesión.
- Intente presionar Ctrl-N para reimprimir mi entrada.
Esperaba que actualizara mi entrada y eliminara la salida que estaba escrita. Sin embargo, no hubo ningún efecto. Todavía hay resultados que saturan mi editor de líneas. Lo verifiqué icanon
y iexten
estoy configurado en este PTY.
Respuesta1
Supongo que su shell es bash
o algún otro shell con capacidades de edición de líneas con todas las funciones.
Estos shells, mientras esperan que usted escriba el comando, configuran el modo tty en raw en lugar de canónico, por lo que la rprnt
configuración no se aplica a ellos.
La herramienta de línea de comando stty
no lo informa ya que estos shells alternan la configuración hacia adelante y hacia atrás durante la edición de la línea versus la ejecución del programa externo solicitado (como stty
él mismo). Puede confirmar esto ejecutando stty -a < /dev/pts/[this-terminal's-number]
desde otro terminal mientras este está en el mensaje.
Elija un programa que lo haganotienen capacidades completas de edición de líneas, como cat
, dash
o similares. Descubrirá que emitir stty rprnt ^N
por adelantado y presionar ^N
realmente reimprime la línea dada. Al menos lo he verificado y me funciona.
Para shells con potentes capacidades de edición de líneas, deberá consultar la documentación del shell proporcionado (o en el caso de bash
la readline
biblioteca) para ver cómo reimprimir el mensaje o cómo configurar su tecla de acceso rápido.