Não é possível executar / bin / bash ... às vezes?

1

Eu estou em um Google Compute Engine que está executando o Debian Wheezy 7.4.

Eu tenho notado coisas estranhas recentemente. Por exemplo, posso fazer sudo bash . Mas, da raiz, não consigo fazer sudo -u anotherUser bash ou su -l anotheruser -c bash .

E, ainda mais importante, não consigo iniciar novas instâncias da tela do GNU. Se eu tentar iniciar uma nova instância, ela será imediatamente encerrada e receberei a mensagem [screen is terminating] . Nas instâncias que estavam em execução, não pude iniciar mais janelas.

Então eu encontrei o que todos tinham em comum: bash !

Eu posso fazer screen zsh ou screen sh .

Eu posso fazer sudo bash e, em seguida, sudo -u anotheruser zsh ou su -l anotheruser -s zsh , mas NÃO su -l anotheruser -c zsh .

Note que eu estou fazendo login com o bash e posso fazer sudo bash . Mas eu não posso usar o bash para sudo ou su da raiz para outro usuário, nem posso usar o bash para uma screen shell.

Eu reiniciei. Sim, isso me preocupou tanto que eu realmente reiniciei meu servidor.

Eu não tenho ideia do que pode causar isso e estou um pouco preocupado.

Meus arquivos de configuração bash (como para eu sei que eles estão inalterados desde o padrão):

A conclusão do bash funciona no shell principal (login).

Aqui está a informação solicitada por Glenn Jackman:

$ md5sum /bin/bash /usr/bin/bash
144968564a6b1159ed82059920cea76f  /bin/bash
md5sum: /usr/bin/bash: No such file or directory
$ getent passwd anotheruser
anotheruser:x:1004:1004::/home/anotheruser:/bin/bash

Também pensei em outro teste. Isso funciona:

$ echo $(bash -c 'echo Hello, World!')

O que está acontecendo?

    
por eje211 19.02.2015 / 04:59

1 resposta

0

Houve um problema em:

/usr/share/bash-completion/bash_completion

Mais especificamente, é a linha no começo:

if [ "$0" != "-bash" ]; then exit; fi

Essa linha verifica se o shell atual é bash. Se não for, não usará a conclusão do bash. Se eu remover a linha, recebo erros em alguns scripts que tentam usar o comando [[ .

Isso é o que eu criei no final:

isbash=no
case "$SHELL" in
  *bash*) isbash=yes ;;
esac
case "$0" in
  *bash*) isbash=yes ;;
esac
if [ "$isbash" = "no" ]; then exit; fi
    
por 19.02.2015 / 19:49