Estoy ejecutando un script muy simple que lee línea por línea e imprime la línea ingresada de nuevo a la terminal:
while read CMD; do
echo $CMD
done
Funciona bien, pero cuando intento editar la línea con el backspacecarácter, se imprime en ^?lugar de eliminar el carácter. Y cuando presiono Ctrl+ backspacela salida es ^H. ¿Cómo podría solucionarse este comportamiento para backspaceeliminar el carácter en lugar de agregar estos caracteres? Intenté el stty erase '^?'comando pero no con éxito.
command-line
bash
vrom911
fuente
fuente

read CMDporread -e CMD.terminatorlugar degnome-terminal. Funciona como se esperaba-eopción. Pero en la máquina de @ vrom911 no es el caso. Me pregunto por qué sucede y dónde se puede configurar.Respuestas:
El problema es que hay muchas formas de representar un retroceso, pero el
readcomando no las comprende todas. Debería poder configurar exactamente lo que se envía al presionar la ← Backspacetecla en la configuración del emulador de terminal.Suponiendo que lo esté utilizando
gnome-terminalcomo emulador, abra el menú Editar y haga clic en Preferencias de perfil . Cambie a la pestaña Compatibilidad y debería obtener estas opciones:Ahora puede cambiar la tecla Retroceso que genera: configuración. Tiene estas cinco opciones a continuación disponibles para elegir. Agregué entre paréntesis cómo se comportan en mi sistema:
^Hlugar)^[[3~lugar)fuente
type readdice y qué$SHELL --versioninformes de shell / versión ?type readdiceread is a shell builtin. y$SHELL --versiondiceGNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)Tuve el mismo problema, usando bash en Gnome-Terminal.
Tenga en cuenta que en la línea de comando, el espacio de retroceso funciona como se esperaba, pero cuando mi programa (un simple cliente de chat basado en socket TCP) está leyendo desde stdin, el
backspacecarácter imprime (hace eco en la pantalla) en^?lugar de eliminar el último carácter.Use
# stty icanonpara permitir el "modo canónico (cocido)". Vea alguna explicación aquí /unix/131105/how-to-read-over-4k-input-without-new-lines-on-a-terminalAlgunos antecedentes de mi problema / solución: tuve un problema en el que necesitaba pegar más de 4k caracteres. Y durante esa investigación, me llevaron al enlace anterior. Solía
# stty -icanondeshabilitar el límite de 4k, pero perdí la capacidad de usar retroceso (borrar).fuente