como posso usar o bash como meu shell de login quando meu administrador de sistema se recusa a me deixar alterá-lo

36

O sysadmin unix no qual estou trabalhando é relutante em me dar acesso para alterar meu shell de login de ksh para bash . Ele deu várias desculpas, a mais engraçada é que, uma vez que eles escrevem todos os seus scripts para ksh , eles não funcionarão se eu tentar executá-los. Eu não sei onde ele consegue essas idéias, mas desde que eu não posso convencê-lo, existe alguma alternativa que eu tenha?

( chsh está instalado nessas máquinas, mas usamos pares de chaves públicos / privados para fazer login, e eu não tenho nenhuma senha, portanto, quando chsh solicitar uma senha, não tenho nada para fornecer. )

    
por iconoclast 29.08.2012 / 23:30

5 respostas

66

Quando você efetua login, o arquivo ~/.profile é lido pelo shell de login (ksh para você). Você pode instruir esse shell de login para substituir a si mesmo por bash. Você deve tomar algumas precauções:

  • Substitua o shell de login apenas se for interativo. Isso é importante: caso contrário, o login no modo gráfico pode não funcionar (depende do sistema: alguns, mas nem todos os sistemas leem ~/.profile ao efetuar login através de xdm ou similar), e expressões como ssh foo '. ~/.profile; mycommand' falharão. / li>
  • Verifique se o bash está disponível, para que você ainda possa efetuar login se o executável não estiver lá por algum motivo.

Você tem a opção de executar o bash como um shell de login ou não. A única grande diferença em torná-lo um shell de login é que ele carregará ~/.bash_profile ou ~/.profile . Portanto, se você executar o bash como shell de login, tenha muito cuidado para ter um ~/.bash_profile ou tome cuidado para não executar o bas da recursividade de ~/.profile . Não há nenhuma vantagem real de ter ~/.profile executado pelo bash em vez de ksh, então eu recomendo não fazer isso.

Defina também a variável de ambiente SHELL para bash, para que programas como emuladores de terminal invoquem esse shell.

Aqui está o código para mudar para o bash. Coloque no final de ~/.profile .

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
    
por 30.08.2012 / 04:12
12

Isso é um pouco confuso, mas você pode fazer com que bash seja o shell que está usando no login, criando um arquivo .profile no seu diretório pessoal, contendo

SHELL='type -P bash'
exec bash -l

Isso fará com que a sessão ksh seja substituída por uma sessão bash . Você não precisará digitar exit (ou ^D ) duas vezes, como faria se iniciasse manualmente uma nova sessão bash toda vez que efetuasse login. E digitando

echo $SHELL

até retornará o caminho para bash .

    
por 29.08.2012 / 23:31
4

A resposta de Giles deve ter o sinalizador -l adicionado ao executar o bash, para que qualquer script de perfil de login seja originado no novo shell bash. (Por exemplo, qualquer coisa em /etc/profile.d/ no RHEL). O script deve então ser:

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" -l
      fi
    fi
esac
    
por 18.11.2015 / 18:40
1

Uma resposta para csh/tcsh inspirada no topo votado por @Gilles é

if ( ! $?BASH ) then
  setenv BASH 'command -v bash'
endif

if ( $?prompt ) then
  if ( -x "$BASH" ) then
    exec "$BASH"
  endif
endif
    
por 20.10.2017 / 23:07
0

Solaris:

usermod -s /bin/bash root
    
por 20.11.2015 / 03:15