Mude seu Shell padrão no Linux com o comando `chsh`

O Bash é frequentemente o shell padrão no Linux, mas o sistema oferece uma variedade de alternativas, como o popular Zsh. Experimentar diferentes shells é simples, e quando você encontrar um que se adeque às suas necessidades, você pode defini-lo como padrão com o comando `chsh`. Vamos explorar como fazer isso.

A Importância do Shell

O shell atua como uma ponte entre você e o sistema operacional. Ele fornece um ambiente dentro da janela do terminal onde você pode inserir comandos e executar programas. O shell interpreta suas entradas e determina o que você deseja realizar. Se ele puder executar a ação sozinho, ele o fará; caso contrário, ele buscará os programas necessários para executar a tarefa.

Há vários shells disponíveis no Linux, todos capazes de realizar as mesmas funções básicas, como navegar no sistema de arquivos, manipular arquivos, iniciar programas e executar scripts. No entanto, cada shell aborda essas tarefas de maneira diferente e possui recursos e particularidades únicas.

Os shells são projetados por pessoas com preferências específicas sobre como as coisas devem funcionar. Se a sua forma de pensar estiver alinhada com a do designer do shell, ele pode ser uma boa opção para você. Além disso, testar um novo shell no Linux é um processo simples e direto.

Na maioria das distribuições Linux, incluindo o Ubuntu, o shell padrão é o bash. Ele é competente e eficiente, mas outros shells podem oferecer recursos que agilizam seu fluxo de trabalho. Experimentar é a melhor maneira de descobrir se um shell diferente se encaixa melhor em suas necessidades.

Uma Variedade de Shells

Já abordamos os diferentes shells do Linux anteriormente, mas aqui está um resumo dos mais comuns:

  • bash: O shell Bourne Again é o padrão em muitas distribuições.
  • rbash: Este shell bash restrito oferece recursos limitados para o usuário ou script em execução.
  • ash: O shell Almquist é uma versão mais leve do bash.
  • dash: O Debian Almquist Shell é usado como o shell padrão para execução de scripts no Ubuntu, sendo mais leve que o bash.
  • zsh: O shell Z é uma versão moderna do bash, oferecendo melhorias como correção ortográfica de comandos e sugestões.
  • fish: O shell interativo amigável foi criado do zero e oferece funcionalidades como sugestões de comandos baseadas no histórico e no conteúdo da pasta atual.
  • ksh: O KornShell fornece uma linguagem de script robusta.

Listando os Shells Instalados

Para ver quais shells estão instalados no seu sistema, utilize o seguinte comando, que exibe o conteúdo do arquivo `/etc/shells`:

cat /etc/shells

Já mencionamos bash, dash e rbash, mas o que é sh?

O sh é o shell Thompson, escrito em 1971 por Ken Thompson dos Bell Labs. Ele não recebe mais manutenção e foi substituído por alternativas mais modernas. Ele ainda é incluído para manter a compatibilidade com scripts mais antigos que contêm a linha:

#!/bin/sh

Essa linha instrui o sistema a usar o shell sh para executar o script. Para verificar qual programa é executado quando você usa o comando `sh`, utilize o comando `which`:

which sh

Isso parece encontrar um binário. No entanto, ao investigar um pouco mais, veremos que é um link simbólico que aponta para o dash:

ls -l /bin/sh

Esta é uma maneira simples de manter a compatibilidade com scripts que esperam encontrar o `sh` em sistemas modernos.

Instalando um Novo Shell

Vamos instalar o shell fish e defini-lo como padrão para o usuário ‘dave’. No Ubuntu, use o seguinte comando:

sudo apt-get install fish

No Manjaro, use o pacman:

sudo pacman -Sy fish

No Fedora, digite:

sudo dnf install fish

Após a instalação, verifique novamente a lista de shells instalados:

cat /etc/shells

Nosso novo shell aparece como `/usr/bin/fish`. Anote esse caminho, pois você precisará dele em breve.

A Variável de Ambiente $SHELL

A variável de ambiente `$SHELL` contém o nome do seu shell atual. Podemos verificar o valor definido com o comando `echo`:

echo $SHELL

Vamos agora iniciar o shell fish:

fish

E verificar novamente o valor da variável `$SHELL`:

echo $SHELL

Na primeira vez que usamos o comando `echo $SHELL`, estávamos no shell bash e a variável continha o caminho para o executável do bash, `/bin/bash`. Quando iniciamos o shell fish, recebemos uma mensagem de boas-vindas e o prompt de comando muda, mas a variável `$SHELL` ainda contém o caminho para o executável do bash. Isso é normal.

Quando você inicia um novo shell (ou qualquer programa), ele herda o ambiente do shell pai. Portanto, o shell fish herda as variáveis de ambiente globais e exportadas do shell bash. Como o valor na variável `$SHELL` não foi alterado, ele tem o mesmo valor no shell fish que tinha no shell bash.

Estamos executando o fish como um programa qualquer. Podemos usar `exit` para sair do shell fish e retornar ao shell bash.

Isso é útil para experimentar novos shells e descobrir como eles funcionam. Você pode testá-los antes de decidir adotar um como seu shell padrão.

Se você decidir tornar o fish – ou qualquer outro shell – seu padrão, precisará usar o comando `chsh`.

O Comando chsh

O comando `chsh` permite que você altere seu shell padrão. É importante saber que ele permite alterar o login padrão e o shell interativo padrão, que podem ser o mesmo ou diferentes.

Sempre que você faz login para obter um prompt de comando, o shell configurado para ser seu shell de login é usado. Quando você já está logado e abre uma janela de terminal, o shell configurado para ser seu shell interativo é usado. Eles podem ser o mesmo shell ou shells diferentes.

Para definir seu shell de login, utilize `chsh` sem parâmetros:

chsh

Sua senha será solicitada. Em seguida, você deverá digitar o caminho para o novo shell e pressionar Enter.

Se fizermos uma conexão remota a este computador de teste, entraremos no shell fish assim que fizermos o login.

Para alterar seu shell interativo, utilize `chsh` com a opção `-s` (shell) e passe o caminho para o novo shell na linha de comando:

chsh -s /usr/bin/fish

Sua senha será solicitada e você retornará ao prompt de comando do shell atual. Você precisa fazer logout e login novamente para que a alteração tenha efeito. Ao fazer isso, você verá a saudação e o prompt de comando do novo shell.

A variável de ambiente `$SHELL` agora conterá o caminho para seu novo shell padrão:

echo $SHELL

Alterando o Shell de Outra Conta de Usuário

Se você tiver privilégios de root e puder usar `sudo`, poderá alterar os shells de outras contas de usuário. O comando é o mesmo de antes, com a adição do nome de usuário dessa pessoa à linha de comando:

sudo chsh -s /usr/bin/fish mary

Quando Mary fizer login novamente, ela verá o novo shell ao abrir uma janela de terminal.

Considerações Finais