Acabei de configurar um VPS com hostinger.com. O sistema operacional é o Ubuntu 18.04. Eu criei uma conta de usuário, Mike. Percebi rapidamente que o preenchimento automático aparentemente não estava instalado, então procurei como você faz isso. Por alguma razão (tipo de shell?) eu tenho que fonte com um ponto, não com a palavra source
.
Logado como mike eu fiz isso:
sudo apt-get install bash-completion
(NB tentando resolver o problema que tentei mais tarde sudo apt-get install --reinstall bash-completion
)
... e adicionei esta linha a /home/mike/.bashrc:
. /etc/bash_completion
Na verdade, este arquivo consiste em uma linha:
. /usr/share/bash-completion/bash_completion
A situação atualmente é que eu posso fazer o preenchimento automático funcionar quando estiver logado como root, fazendo isso:
$ . /home/mike/.bashrc
Mas quando logado como mike o mesmo comando dá:
$ . /home/mike/.bashrc
-su: 26: /usr/share/bash-completion/bash_completion: Syntax error: "(" unexpected
Procurando por respostas, imaginei que o problema pudesse ser causado por um conflito de alias. Mas agora não há aliases quando logado como mike e mesmo assim o problema persiste.
Estou tentando (entre outras coisas) entender o que "-su: 26" realmente significa. Isso parece ser uma referência de linha. Mas a linha 26 desse arquivo está de fato em branco.
O que estou pensando em fazer agora é passar por /usr/share/bash-completion/bash_completion, comentando as linhas até que as coisas comecem a fazer sentido. Mas é um arquivo grande!
Obviamente, um aspecto curioso disso é que funciona quando estou logado como root, mas não quando estou logado como mike.
depois
eu scp
coloquei meu arquivo bash_completion na minha máquina local para o VPS e o usei para substituir o existente (renomeado o último primeiro). Novamente, o fornecimento quando o root funcionou bem. Novamente, sourcing quando conectado como mike produziu (vários) erros:
$ . /home/mike/.bashrc
-su: 29: /usr/share/bash-completion/bash_completion: [[: not found
-su: 35: /usr/share/bash-completion/bash_completion: [[: not found
-su: 51: /usr/share/bash-completion/bash_completion: shopt: not found
-su: 57: /usr/share/bash-completion/bash_completion: complete: not found
-su: 62: /usr/share/bash-completion/bash_completion: complete: not found
[... more... ]
Alguma sugestão? Pode ser que a conta do microfone esteja, por algum motivo, usando um shell diferente? Uma gramática de shell diferente? Como posso verificar esse tipo de coisa?
(logado como root :)
... um pouco de pesquisa encontra a resposta:
... problema resolvido (graças a ender.qa)
mais informações
Lendo ao redor, primeiro verifico que de fato
/bin/sh
não é um arquivo, mas um link simbólico. De acordo com as versões modernas do Ubuntu, isso era (antes de executarusermod
) link para/bin/dash
, sobre o qual li:bash é um padrão de fato (muito usado), mas não é "padrão"; sh no Ubuntu usa dash, que é um shell compatível com Posix, então é realmente padrão. Meu conselho é usar o traço o mais rápido possível para scripts, especialmente para scripts do lado do servidor. Embora o bash seja mais expressivo, o dash roda muito mais rápido e é mais seguro ( aqui , comentário de Rick-777)
O que faz você se perguntar por que a conta do Hostinger.com
root
usabash
em vez de usardash
como padrão, como uma conta de usuário padrão criada. Além do meu salário.