Como se certificar de que eu uso a versão mais recente do bash?

5

Acabei de configurar o bash v4.1.0 na minha máquina.

A versão antiga está em /bin/bash . Existe uma maneira de usar a versão mais recente do bash sem substituir o antigo de /bin ? Eu quero que a versão mais recente seja usada como padrão

$ which bash
/bin/bash
$ bash --version
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
$ ~/bash/bash-4.1/bash --version
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$
    
por Lazer 23.10.2010 / 13:12

2 respostas

6

Antes de mais nada, certifique-se de que seu bash favorito esteja em $PATH antes do sistema um. Defina também a variável de ambiente SHELL para o caminho completo do seu shell interativo favorito (presumivelmente sua própria versão instalada do bash).

Você não pode configurar seu próprio shell como shell de login sem a intervenção do root, mas geralmente você não precisa de nada melhor do que o POSIX sh in ~/.profile de qualquer maneira. Você pode colocar exec $SHELL no final de ~/.profile para obter seu shell interativo favorito em sessões de console ou ssh, mas certifique-se de não fazê-lo a partir de shells que não sejam interativos (por exemplo, algumas distribuições Linux tem scripts de sessão X que começam com #!/bin/bash --login ). É difícil detectar precisamente quando é razoável chamar exec em .profile , mas o teste de que o shell é interativo funciona na maioria dos casos; você pode fazer algo assim:

case $- in
  *i*) :;;
  *) exec "$SHELL";;
esac

Se você não é root, é tudo o que você pode fazer. Em particular, os scripts com cabeçalho #!/bin/bash continuarão usando o bash do sistema, enquanto os scripts com o cabeçalho #!/usr/bin/env bash usarão o seu.

Se você for root, poderá adicionar sua instalação bash a /etc/shells , após o qual você poderá usar chsh para alterar seu shell de login para ela. Você também pode substituir /bin/bash pela sua própria versão, mas eu não recomendaria isso para um componente de sistema tão crítico. Se você realmente quer substituir /bin/bash , pelo menos mantenha o gerenciador de pacotes feliz; em um sistema baseado em dpkg, você pode usar dpkg-divert .

    
por 23.10.2010 / 23:39
6

Você pode definir o shell padrão do seu usuário usando o comando usermod com a opção -s (requer privilégios de root):

sudo usermod -s /home/lazer/bash/bash-4.1/bash lazer
    
por 23.10.2010 / 13:20

Tags