Como altero meu shell padrão para bash se não tenho acesso ao chsh nem ao / etc / passwd?


8

Estou trabalhando em uma conta remota do Linux para uma universidade, e o shell padrão é infelizmente cshsem conclusão de guia. Como posso alterar o shell padrão da minha conta bash? chshnão está disponível.


11
Qual sistema a universidade usa para armazenar contas? ldapmodifypode funcionar.
user1686

Ou, se eles estiverem usando o NIS, ypchshdeve ser o comando apropriado.
M000

Se você quer apenas o preenchimento de tabulação, você pode adicioná-los ao seu ~ / .cshrc set filece set autolist.
Hennes

Respostas:


11

Você provavelmente deve perguntar aos seus administradores de sistema se eles podem alterar seu shell padrão para você. Se eles não podem ou não (como era o caso quando eu estava na faculdade), a solução alternativa que usei foi adicionar

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

para .cshrc. (Certifique-se de substituir /path/to/bashpor um caminho real, é claro. Essa pode até ser uma versão bashque reside no diretório inicial, se a versão fornecida pelo sistema estiver muito desatualizada para o seu gosto.) Para maior eficiência, é melhor fazer isso o mais cedo .cshrcpossível, para evitar o .cshrcprocessamento adicional que se tornará discutível uma vez que bashsubstitua o cshprocesso.


Isso não funcionou para mim na minha universidade. Provavelmente terei que conversar com o administrador do sistema.
02s2ts 27/03

3

Você pode simplesmente se conectar com

ssh -t yourhost bash

para executar o shell Bash automaticamente quando você efetuar login.


Nos comentários abaixo, você pode ver a alternativa

ssh -t yourhost exec bash

execexecutará um novo processo e sairá do antigo, portanto, o cshprocesso será encerrado diretamente.

Se anexar -lno final do comando como argumento ao Bash, ele será tratado como um shell de login, mas talvez isso não seja necessário.


11
ssh -t yourhost exec -a bash -l bashsubstituir completamente o shell original, em vez de executar como um processo dentro do shell inicial.
chepner

@chepner: Interessante, estou usando uma ssh -t host bashsolução simples em uma situação semelhante, mas seu caminho é melhor. Não pensei nisso exec, obrigado! Vou atualizar a postagem com sua sugestão.
Daniel Andersson

Fiquei um pouco chocado, no entanto, usando argumentos para o bashcomando interno exec.
Chepner

@chepner: Ah sim, eu tentei agora em um host com zsh como shell padrão e ele falhar em ambos -ae -l. Vou modificar o exemplo na minha resposta.
Daniel Andersson

0

A melhor solução que encontrei foi sobre stackexchange. Aqui está o link stackexchange e aqui está a solução:

crie um arquivo .profile no seu diretório pessoal e cole o seguinte, ou adicione ao final do seu .profile se você já tiver um.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

0

Eu pesquisei muito quando você está usando autenticação LADP via PAM, acho que a melhor solução é colocar SHELL = / bin / bash exec / bin / bash no arquivo .profile no diretório inicial do usuário

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.