Retroceso, la pestaña no funciona en la terminal (usando ssh)

37

Cuando ingreso a otra máquina con Debian con mi cuenta (con permisos sudo), mi tecla de retroceso genera algunos símbolos incómodos al presionar. También Taby delllaves no funcionan demasiado.

Por otro lado, también tengo otra cuenta en la misma máquina y cuando reviso esta cuenta, su terminal funciona perfectamente bien. No pude entender por qué está sucediendo esto.

gopi1410
fuente

Respuestas:

37

He visto tales problemas antes.

Tome el retroceso, por ejemplo, el host remoto espera que algún carácter se use como "borrar / retroceso", mientras presiona el retroceso en el terminal, el programa del terminal enviará algún carácter al host remoto, si lo que el host remoto espera difiere con los caracteres enviados por el programa de terminal, se encontrará con este problema. Entonces, una solución rápida es la siguiente:

  1. ejecute el comando #stty -aen el host remoto y encuentre lo que se espera que sea un código de borrado en la salida. Decir erase=^?.
  2. En la terminal, escribe Ctrlvy presiona la tecla de retroceso. Verá qué código se envía como "borrar". Di que lo es ^H.
  3. En el host remoto, ejecute #stty erase ^H.
    (Nota: use Ctrlv+ Backspace, no escriba ^ manualmente)

Puede solucionar el problema de Tab con el mismo que el anterior.

Derui Si
fuente
Mi carácter de retroceso es un símbolo especial, algo así como un triángulo invertido. Así que no funciona
gopi1410
1
Este simple comentario es sin duda la mejor solución que he visto para esto. Se siente como un golpe pero funciona.
Paulo Matos
¡Esto funcionó para mí! Sin embargo, lo que no entiendo es por qué mi shell maneja el espacio de retroceso como se esperaba, pero la lectura de stdin en mi aplicación no lo hace. Hacer el cambio sugerido da como resultado que la retroceso funcione para ambos. Según tengo entendido, el shell maneja el almacenamiento en búfer stdin, entonces, ¿no debería ser el manejo de retroceso el mismo para el shell y una aplicación?
Samuel
1
¿Qué pasa si no se envía ningún código? Ctrlv + retroceso no produce nada ...
Manfredo
Para mí, el código de retroceso es el mismo que el de stty -asalida, pero aún no funciona
Matej J
36

Además de la solución "stty", puede probar la solución "TERM".

Puede enviar a su Debian desde algún terminal (putty, solaris dterm, debain xterm, you-name-it), esta capacidad de anuncio de terminal (que incluye claves como Retroceso y Tabulación) a través de la variable de entorno TERM.

Entonces, después de ssh a unix host (no depende de debian u otro host) configure la variable TERM de acuerdo con su terminal. Considere que está usando bash como shell y vt100 como terminal:

export TERM=vt100

ps: TERM debe anunciarse a través de ssh automáticamente, pero en algunas circunstancias esta magia falla.

Paul
fuente
todavía no funciona :(
gopi1410
¿Qué terminal estás usando? ¿Y cuál es el valor de TERM que has probado?
Paul
Intenté vt100. ¿Cómo llego a conocer el valor de TERM? Intenté ssh desde cygwin (en windows) a Debian. Si hay problemas con cygwin, incluso lo probé desde la terminal de ubuntu, pero el mismo problema.
gopi1410
No estoy seguro de que cygwin tenga una buena emulación de terminal, por lo que sé, cygwin solo usa la consola de Windows normal que carece de emulación de terminal (puede estar equivocado). Desde ubuntu todo debería funcionar bien. Algo está mal con la biblioteca de shell o termcap en debian. Inicie sesión desde Ubuntu y déme la salida de los comandos: 1. echo $ TERM 2. stty -a
paul
2
Si bien esto no me ayudó directamente, ya que TERM se configuró correctamente, ayudó a identificar el problema. Me faltaban las entradas de terminfo para mi terminal. Estoy usando urxvt y en Arch necesitas instalar rxvt-unicode-terminfo para solucionar este problema en particular
Xandaros
15

Esto se debe a que su shell predeterminado sh, para usar bash, solo se ejecuta bashdesde su shell.

bash

Para establecer bashcomo su shell predeterminado:

chsh -s /bin/bash 

o

sudo chsh -s /bin/bash yourusername
llama de hielo
fuente
2
Este me lo arregló. ¡Aunque nunca mire mi shell de inicio de sesión!
James Pack
2
Estoy viendo este problema, pero mi shell es bash.
fraxture
6

Su shell puede estar configurado en /bin/shlugar de/bin/bash

jm.
fuente
1
Relacionado con esta respuesta: unix.stackexchange.com/questions/50542/…
Samuel
Esto sería más útil si explicara un poco más y cómo cambiarlo, pero fue el problema que tuve. Gracias @Tom por tu enlace que me solucionó el problema.
Jake
Esta fue la razón en mi caso ... para ese usuario en particular. No se definió ningún shell /etc/passwd, cuando agregué :/bin/basha su línea funcionó. Puede averiguar con qué shell se está utilizandoecho $0
MSpreij
6

Usualmente uso esto para arreglar cualquier salida de caracteres funky en mi terminal. Restablece todos los caracteres especiales a sus valores predeterminados.

stty sane

Desde la página man de stty:

igual que cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoel-echok -xcase -tostop -echoprt echoctl echoke, todos los caracteres especiales a sus valores predeterminados

David Morales
fuente
2

Además de la respuesta de Paul, si desea conservar la capacidad de obtener resultados coloridos, puede usar xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
estado
fuente
1
toe -amuestra una lista de tipos de terminales compatibles ... xterm-88colorde lejos no es la única opción y de hecho puede no estar disponible en sistemas particulares.
0xC0000022L