Por que minhas teclas de setas não funcionam em sh?

15

Eu instalei o Ubuntu recentemente e quando eu corro no Terminal, minhas teclas de seta não funcionam, então não posso ler meu histórico de chamadas ou editar o que quer que eu esteja digitando. Apenas aparece como personagens estranhos como ^[[A .

O shell de login é bash e funciona bem, mas assim que eu mudo para sh, eles não funcionam.

Como posso consertar isso?

    
por Joe 30.09.2011 / 05:33

3 respostas

14

O shell /bin/sh (dash) é um shell de funcionalidade reduzida compatível com POSIX para ser mais eficiente (menor) para inicializar o sistema. Como parte disso, a história e a edição avançada da linha de comando não estão incluídas. É mais apropriado para scripts POSIX estritos do que como um shell interativo. A idéia é que o shell de 'login' seria bash por padrão, mas o sistema de boot estaria usando dash. A página man no Ubuntu 11.04 mostra que o dash tem histórico e edição de linha de comando, mas o programa não possui esses recursos. Dê uma olhada no tamanho dos executáveis básicos.

$ ls -l /bin/*ash /bin/sh
-rwxr-xr-x 1 root root 822420 Mar 31 15:26 /bin/bash
-rwxr-xr-x 1 root root  83848 Nov 15  2010 /bin/dash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/rbash -> bash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/sh -> dash
$ strings /bin/bash | egrep -ci 'fc|hist'
181
$ strings /bin/dash | egrep -ci 'fs|hist'
1

Tente se acostumar a executar $SHELL ou bash em vez de apenas sh .

    
por 30.09.2011 / 08:33
8

No caso de /bin/sh ser Dash , ele deve ser configurado --with-libedit antes da compilação. Caso contrário, você ainda pode executar set -o vi no shell, mas não faz nada útil.

    
por 13.11.2012 / 15:24
0

sh não tem histórico. Pelo menos a minha não:

server$ sh
\h$ history 
sh: history: not found
\h$ fc
sh: fc: not found
\h$ exit
server$ type sh
sh is hashed (/bin/sh)
server$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Jun  1 18:43 /bin/sh -> dash*
    
por 30.09.2011 / 08:12