Domine o Bash: Personalize seu Shell com o Comando `shopt`

Ajustar o comportamento do seu shell Bash com o comando `shopt` permite controlar mais de 50 configurações distintas. Este guia demonstrará como personalizar seu ambiente Linux de acordo com suas preferências.

O Comando Embutido `shopt`

O comando `shopt` é uma funcionalidade integrada em todas as versões do shell Bash, eliminando a necessidade de instalações adicionais. O número de opções disponíveis no `shopt` tem crescido consistentemente ao longo dos anos. Assim, versões mais antigas do Bash podem apresentar uma lista menor de opções.

Caso encontre algum comportamento inesperado, consulte a página man do Bash e verifique se a opção desejada está disponível na sua versão do `shopt`.

A seguir, exploraremos todas as opções do comando `shopt`, incluindo exemplos de uso. Recomendamos também consultar a página man do Bash ou o Manual de Referência GNU Bash para identificar opções que possam ser úteis ou interessantes para você.

Algumas opções do `shopt` são habilitadas por padrão, fazendo parte do comportamento padrão do Bash. Você pode ativar uma opção `shopt` para uma modificação temporária no Bash. Essa alteração será revertida para o comportamento padrão ao fechar o shell.

No entanto, caso deseje que um comportamento modificado seja aplicado sempre que um shell Bash for iniciado, você pode tornar as alterações permanentes.

Opções do `shopt`

Existem 53 opções do `shopt`. Ao executar o comando `shopt` sem nenhuma opção, todas elas serão listadas. Se direcionarmos essa saída para o comando `wc`, podemos contar as linhas, palavras e caracteres. Como cada opção do `shopt` é exibida em uma linha separada, o número de linhas corresponde ao número de opções.

O seguinte comando pode ser usado:

shopt | wc

Para visualizar todas as opções de forma organizada, podemos direcionar a saída para o comando `column` para exibir os nomes das opções em colunas ou usar o comando `less` para facilitar a leitura.

O comando a seguir mostra como usar `column`:

shopt | column

Localizando `shopt` no Manual do Linux

A seção dedicada ao `shopt` e suas opções está localizada na parte do manual do Linux referente ao Bash. Essa seção possui mais de 6.000 linhas. É possível encontrar a descrição do `shopt` navegando manualmente, ou usando uma busca dentro do manual.

Para realizar uma busca, abra o manual do Bash com o seguinte comando:

man bash

Dentro do manual, pressione a tecla `/` para iniciar uma pesquisa. Digite o seguinte termo e pressione Enter:

assoc_expand_once

O início da seção `shopt` será exibido na janela do manual.

Habilitando e Desabilitando Opções

Para ativar ou desativar opções do `shopt`, utilize os seguintes comandos:

`-s`: Ativar ou habilitar uma opção.
`-u`: Desativar ou remover uma opção.

Como algumas opções já vêm ativadas por padrão, é interessante verificar quais opções estão ativas. Para isso, use as opções `-s` e `-u` sem especificar um nome de opção. Isso faz com que o `shopt` liste as opções ativas e inativas.

Para listar as opções ativas, utilize:

shopt -s

Para listar as opções inativas, utilize:

shopt -u | column

Você pode utilizar o comando `shopt` seguido apenas pelo nome da opção para verificar o seu status (ativado ou desativado).

Por exemplo, para verificar o estado da opção `histverify`, digite:

shopt histverify

Para ativar a opção `histverify`, digite:

shopt -s histverify

E para verificar novamente o estado da opção:

shopt histverify

A opção `histverify` altera a forma como o comando `history` se comporta. Normalmente, ao solicitar a repetição de um comando utilizando seu número no histórico (exemplo: `!245`), o comando é recuperado do histórico e executado imediatamente.

Se preferir revisar o comando antes de executá-lo, para garantir que é o correto, e poder editá-lo, se necessário, ative a opção `histverify` com o seguinte comando:

!245

O comando será recuperado e exibido na linha de comando, permitindo que você o exclua, edite ou execute, pressionando Enter.

A Opção `autocd`

Com a opção `autocd` ativada, ao digitar o nome de um diretório na linha de comando e pressionar Enter, ele será tratado como se você tivesse usado o comando `cd` antes do nome.

Para ativar a opção `autocd`, digite:

shopt -s autocd

Em seguida, digite o nome de um diretório:

Documents

A Opção `cdspell`

Quando a opção `cdspell` está ativa, o Bash corrige automaticamente pequenos erros de ortografia e digitação nos nomes de diretórios.

Para habilitar a opção `cdspell`, digite:

shopt -s cdspell

Para tentar mudar para um diretório em minúsculas que deveria ter uma letra inicial maiúscula, utilize:

cd documents

Para tentar acessar um diretório com um “t” extra no nome, utilize:

cd ../Picttures

O Bash navegará para cada diretório, corrigindo erros de ortografia.

A Opção `xpg_echo`

Com a opção `xpg_echo` ativada, o comando `echo` irá interpretar caracteres de escape, como `\n` para nova linha e `\t` para tabulação horizontal.

Primeiro, para garantir que a opção está ativa, digite:

shopt -s xpg_echo

Em seguida, inclua `\n` em uma string que será passada para o comando `echo`:

echo "This is line onenThis is line two"

O caractere de nova linha com escape força uma quebra de linha na saída.

Isso resulta no mesmo comportamento do comando `echo -e` (ativar interpretação de escape), mas `xpg_echo` permite que essa seja a ação padrão.

A Opção `dotglob`

A opção `dotglob` deve ser usada com cuidado. Ela permite que arquivos e diretórios que começam com um ponto (`.`) sejam incluídos nas expansões de nomes (globbing). Eles são chamados de “arquivos de ponto” ou “diretórios de ponto” e geralmente estão ocultos. A opção `dotglob` ignora o ponto no início dos nomes.

Inicialmente, vamos buscar arquivos ou diretórios que terminam em “geek” com o seguinte comando:

ls *geek

Um arquivo será encontrado e listado. Em seguida, ativaremos a opção `dotglob` com o seguinte comando:

shopt -s dotglob

Emitiremos o mesmo comando `ls` para procurar arquivos e diretórios que terminam em “geek”:

ls *geek

Dessa vez, dois arquivos são encontrados e listados, um dos quais é um arquivo de ponto. É necessário ter atenção com os comandos `rm` e `mv` quando a opção `dotglob` estiver ativa.

A Opção `nocaseglob`

A opção `nocaseglob` é similar à opção `dotglob`, exceto que `nocaseglob` faz com que a diferença entre letras maiúsculas e minúsculas em nomes de arquivos e diretórios seja ignorada nas expansões de nomes.

Digite o seguinte para procurar arquivos ou diretórios que começam com “how”:

ls how*

Um arquivo é encontrado e listado. Para ativar a opção `nocaseglob`, digite:

shopt -s nocaseglob

Em seguida, repita o comando `ls`:

ls how*

Dois arquivos são encontrados, um dos quais contém letras maiúsculas.

Tornando as Alterações Permanentes

As alterações realizadas durarão apenas até o fechamento do shell Bash atual. Para torná-las permanentes em diferentes sessões do shell, é necessário adicioná-las ao arquivo `.bashrc`.

No seu diretório inicial, execute o seguinte comando para abrir o arquivo `.bashrc` no editor de texto gráfico Gedit (ou altere-o para usar seu editor preferido):

gedit .bashrc

O editor Gedit será aberto com o arquivo `.bashrc` carregado. Algumas entradas do `shopt` já devem estar presentes.

Você pode adicionar suas próprias opções do `shopt` aqui. Após adicioná-las, salve as alterações e feche o editor. A partir de agora, sempre que você abrir um novo shell Bash, suas opções personalizadas estarão ativas.

Inúmeras Opções

É fato que o comando `shopt` oferece inúmeras opções, mas não é necessário explorá-las todas de uma só vez. Devido à grande quantidade, é provável que algumas não sejam de seu interesse.

Por exemplo, existem várias opções que forçam o Bash a operar de maneira compatível com versões específicas e antigas. Isso pode ser útil em casos específicos.

Você pode revisar a página man do Bash ou o Manual de Referência GNU Bash. Escolha as opções que farão diferença no seu dia a dia e experimente-as. Tenha cautela com as opções que afetam a forma como os nomes de arquivos e diretórios são expandidos. Use-as com um comando inofensivo, como `ls`, até se sentir confortável com elas.