Por que a conclusão do man page falha após o su?

3

Eu tenho uma instalação padrão do Debian 8.1. Eu faço

su
man apt<TAB>

mas não consiga nada. Eu vejo o manual quando escrevo man apt-get em ambos os modos: como user mas e como root. No entanto, a conclusão da tabulação funciona apenas no modo de usuário.

Como posso ativar a conclusão da tabela depois do homem na raiz? Por que isso é desativado por padrão?

    
por Léo Léopold Hertz 준영 30.07.2015 / 21:53

2 respostas

5

A execução de su chama o bash no modo não-login. Bash então lê .bashrc para configurar seu ambiente.

A execução de su - chama o bash como um shell de login. Neste modo /etc/profile é executado se existir. O Bash também procura ~/.bash_profile , ~/.bash_login e ~/.profile executando o primeiro arquivo encontrado. Embora não documentado, parece executar ~/.bashrc quando nenhum deles existe.

Se você tiver um comportamento diferente, é provável que você esteja usando arquivos diferentes para inicializar o bash, dependendo de como ele é chamado.

Eu testei qual arquivo foi chamado adicionando linhas como echo .bashrc ao final dos arquivos existentes. Isso exibirá quais configurações são chamadas.

Há mais detalhes sobre esse comportamento na seção INVOCATION da página bash man.

A conclusão de tabulação está disponível em bash , mas não em sh . root normalmente tem sh como seu shell, pois bash pode não estar disponível. Os usuários geralmente têm bash como seu shell.

Tente executar bash como root antes de tentar a conclusão da tabulação. Isso deve permitir a conclusão da tabulação.

    
por 31.07.2015 / 01:38
1

O Bash tem dois mecanismos de conclusão: um simples que, na maioria das vezes, apenas realiza a conclusão de comandos em posição de comando e nomes de arquivos na posição do argumento e um argumento sofisticado que completa argumentos baseados no comando. Para obter a conclusão da página de manual, você precisa de uma fantasia.

Quando você inicia o bash, apenas o mecanismo de conclusão simples é ativado. Para obter o mecanismo sofisticado, você precisa fornecer /etc/bash_completion . Isso altera o comportamento histórico e adiciona ao tempo de inicialização, o que pode ser o motivo pelo qual esse não é o padrão do bash.

No Debian, a instrução para ler /etc/bash_completion está presente no padrão .bashrc para novas contas, mas não no arquivo de configuração do sistema /etc/bash.bashrc . Ele não é colocado no arquivo de configuração do sistema porque isso impossibilitaria que os usuários optassem por sair dele. Se você quer o sofisticado sistema de completação em shells rodando como root, você precisa adicionar esta linha em /root/.bashrc :

. /etc/bash_completion
    
por 31.07.2015 / 09:16