Autocomplete de tabulação no Bourne Shell

7

Eu não sei como obter a tecla TAB para autocompletar nomes de arquivos, comandos ou qualquer coisa.

Estou em um sistema semelhante ao Unix (OS / 390) e dependo de vários scripts que funcionam em sh (shell Bourne, não BASH), mas não em outros shells (tcsh, por exemplo), então posso ' t comuta as conchas. Eu costumo me conectar a este sistema via ssh ou telnet do GNOME Terminal do Ubuntu executando bash localmente. Outras pessoas se conectam ao sistema OS / 390 via telnet a partir do prompt de comando do Windows XP, e elas são capazes de completar automaticamente com a tecla TAB após a emissão de "set-emacs". Quando eu emito "set-emacs", eu recebo algumas das funcionalidades apropriadas (por exemplo, ctrl-p para voltar no histórico, por exemplo), mas não no autocomplete.

Estou ciente da opção "set -o vi", mas usando "ESC- *", etc. não me interessa porque sei que a tecla TAB simples funciona para outras pessoas.

Existe algo sobre o Ubuntu, o GNOME Terminal, o bash ou o ssh que envia um caractere de guia diferente de um prompt de comando do Windows XP executando o telnet?

Alguém tem uma ideia de por que eu não consigo colocar a tab no autocomplete enquanto pessoas na mesma máquina remota, executando o mesmo shell, conseguem?

O que deve ser feito para permitir a conclusão automática da guia ?

    
por Thomas G Henry 15.12.2010 / 18:45

2 respostas

6

(Nenhuma resposta à sua pergunta exata, mas muitas soluções alternativas.)

Você não precisa corresponder seu shell de script ao seu shell interativo. (Por exemplo, a maioria dos usuários (t) csh ou zsh escreve scripts sh). Se você tem ou pode instalar um shell interativo melhor que o shell Bourne (zsh, bash, tcsh), vá em frente. Mesmo se você não puder, veja se há um ksh, que provavelmente terá recursos interativos ligeiramente melhores do que um shell Bourne.

Você pode verificar qual caractere a tecla tab envia, digitando echo ' Ctrl + V Guia ' | od -t x1 Enter . 0000000 09 0a (ou seja, na posição 0, dois caracteres, uma guia e uma nova linha) é a saída esperada. Eu não espero que seja esse o problema.

Se você não conseguir um ambiente confortável, poderá tentar fazer mais coisas remotamente, usando sua máquina local para interação o máximo possível. Isso tem seus altos e baixos.

  • No Linux (ou na maioria dos outros unices, incluindo OSX, mas não no Windows), você pode usar sshfs para acessar o sistema de arquivos remoto.
  • Dentro do Emacs, você pode navegar facilmente pelos arquivos remotos através do Tramp (abra /os390hostname:/path/on/remote/machine , você terá a conclusão). Você também pode usar Eshell para obter uma interface de shell remota (um shell interno do Emacs ); se você mudar para um diretório remoto ( cd /os390hostname:/path/on/remote/machine ), os comandos externos que você iniciar serão executados na máquina remota. Se você precisar executar comandos como root, o Tramp (e o Eshell, que é baseado nele) pode combinar o ssh com su ou sudo .
por 15.12.2010 / 19:57
1

Quando você conseguir emitir set -o emacs e não receber uma mensagem de erro, provavelmente não usará o bourne shell , mas um derivado do ksh.

O shell Korn faz auto-completar com ESC, você tentou isso?

BTW: se você realmente gosta de usar um Bourne Shell com um editor de histórico e com a conclusão do nome do arquivo, você pode experimentar o meu Bourne Shell portátil em:

http://sourceforge.net/projects/schilytools/files/

Como este é um Bourne Shell que foi convertido de sbrk () para malloc (), ele é executado em ambientes não-UNIX.

Ainda pode haver alguns problemas com a portabilidade:

  • Se o ambiente do OS / 390 utilizar o EBCDIC, os arquivos ctype * precisarão de algum trabalho.

  • Se o seu ambiente não suporta fork () nem uma emulação vfork () semelhante ao OpenVMS, pode não haver maneira de compilá-lo e executá-lo sem alguns dias de esforço.

Veja o link para uma verificação rápida dos recursos.

    
por 06.09.2015 / 15:00