Como ativar o bash completion no modo vi no Synology DSM6

4

Quando liguei o modo vi no bash definindo set -o vi de repente a conclusão da tabulação foi quebrada e uma tabulação literal foi inserida. Como isso pode ser corrigido?

    
por Gerhard Burger 08.05.2016 / 17:17

1 resposta

6

TL; DR Resolva criando ~/.profile com

if [ -x /bin/bash ]; then
    exec /bin/bash
fi

Versão longa:
Depois de pesquisar por bastante tempo, descobri que no DSM6 bash é executado no modo posix (verifique com set -o ) e a conclusão da tabulação não funciona no modo vi no modo posix ( conclusão do bash no modo Posix ). Eu tentei a solução proposta adicionando bind TAB:complete ao meu ~/.bashrc , mas isso não funcionou. Eu também tentei desligar o modo posix com set +o posix e isso funcionou, mas apenas na linha de comando e não quando definido em ~/.bashrc .

Então eu tentei descobrir por que o bash começaria no modo posix por padrão. Descobri que meu shell de login estava definido como /bin/sh (você pode encontrar isso em /etc/passwd ), que é vinculado a /bin/bash (verifique com ls -l /bin/sh ). Nas páginas do bash man ele diz que

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.

então a solução parece, foi mudar o shell de login para /bin/bash . Depois que fiz isso, não consegui mais usar a minha sinologia, razão: Permission denied, please try again. A causa? Aparentemente, a Synology desaprova quaisquer outros shells de login do que ash ou sh e eles corrigiram e compilaram isso no binário do OpenSSH (por que o & * # $% eles acham que é uma ideia inteligente ?!)

Então, o que fazer? A solução proposta é iniciar uma nova sessão bash criando ~/.profile com

if [ -x /bin/bash ]; then
    exec /bin/bash
fi

e agora definindo set -o vi em ~/.bashrc funciona como esperado. O único problema é que o perfil padrão em /etc/profile não é mais lido, então você precisa definir um bom prompt (PS1) em ~/.bashrc . Você pode copiar um padrão ubuntu ~/.bashrc ou você pode dar uma olhada no padrão PS1 em /etc.defaults/.bash_profile .

    
por 08.05.2016 / 17:17