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.