Windows bash pega setas como símbolos via shell ssh e fish no servidor

0

Eu tenho uma pergunta complicada. Eu estou usando o Windows 10 Anniversary Update com Bash para o Ubuntu. Estou me conectando ao servidor via ssh . Este servidor usa fish shell . E quando pressiono as setas, ele apenas imprime alguns símbolos em vez de me mostrar o histórico de comandos ou adivinhar meu próximo comando. Aqui está o que eu vejo:

  • seta para cima imprime [A
  • seta para baixo imprime [B
  • seta para a direita imprime [C
  • seta para a esquerda imprime [D

No entanto, as setas funcionam bem em bash . Existe alguma idéia do porquê isso está acontecendo?

    
por Vito Gravano 18.10.2016 / 16:46

2 respostas

0

A Atualização de Aniversário do Windows 10 com o Bash for Ubuntu basicamente roda o bash em uma janela do console, cujas seqüências de escape (incluindo entradas como setas) estão documentadas no MSDN:

Por si só, ssh é largamente irrelevante (passa os caracteres de / para a máquina remota inalterada). O que importa é a descrição do terminal que sua máquina remota usa e se o fish shell inicializa as coisas.

Considerando que você está vendo [A na máquina remota, isso indica que o terminal está enviando chaves de cursor de modo normal (o estado quando as coisas não são inicializadas). Isso é consistente com o bash, cujas configurações tendem a ser codificadas (veja no máximo .inputrc files) ou com base na descrição do terminal "linux" não inicializada. No lado do Windows, com certeza: bash irá "funcionar", porque está configurado para funcionar com o que está lá. No lado remoto, o shell de peixe usa o que está em TERM (que provavelmente é "xterm"). Se for "xterm", o shell de peixe estaria esperando as seqüências do cursor modo de aplicativo , por exemplo, ^[OA versus ^[[A , e vendo o último o maltrataria.

Leitura adicional:

por 19.10.2016 / 03:08
1

O porquê:

A sessão que você está conectando está usando uma emulação de terminal diferente da sua shell bash.

A solução fácil:

Não use as teclas de seta nas sessões do ssh.

A solução mais difícil:

Pesquise o servidor de destino e o shell de pesca e determine qual emulação de terminal eles estão usando e quais opções existem para alterá-lo. Pesquise seu Bash for Windows para descobrir qual emulação de terminal ele usa e quais opções existem para alterá-lo. Encontre a sobreposição entre esses dois e implemente-o.

A solução do Windows:

Use o Putty (ou outro software cliente ssh) no Windows para se conectar diretamente ao servidor de destino.

A solução do Windows FOSS:

Use ' Terminais ' ou algo assim.

A solução HARDCORE:

Escreva um script que funcione em Bash para Windows que detecta automaticamente qual emulação de terminal é necessária e implementa isso caso a caso, para que você possa se conectar remotamente a qualquer dispositivo habilitado para ssh e sempre use as teclas de seta.

    
por 18.10.2016 / 17:21