você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

Uma pequena dica de uso do shopt

Por Júlio Cezar Neves

Data de Publicação: 14 de Abril de 2009

Ultimamente só tenho mandado para o Cantinho do Shell dicas úteis sobre programas pouco difundidos. Este artigo não sai desta linha, pois mostrarei algumas dicas de uso do intrínseco (builtin) shopt do Bash. O assunto não se esgota aqui pois neste artigo veremos somente algumas dicas (cerca de 20%) de uso da opção -s, (de set) mas estava no site do Bash, baixando a versão 4.0 quando me deparei com estes macetes e trouxe-os para dividir com vocês.

Teste as opcoes a seguir dentro do comando shopt -s <opcoes>.

cdspell

Com esta opção setada, pequenos erros de digitação no nome do diretório para o qual você deseja fazer um cd serão ignorados, isto é, caracteres extras ou esquecidos serão automaticamente corrigidos sem necessidade de redigitação.

No exemplo a seguir, queria fazer um cd rede, que é um diretório abaixo do meu home.

  $ cd red
  bash: cd: red: Arquivo ou diretório inexistente
  $ shopt -s cdspell
  $ cd red
  rede
  $ cd -
  /home/jneves
  $ cd ede
  rede
  $ cd -
  /home/jneves
  $ cd redes
  rede
  cmdhist

Essa opção é bacana, pois transforma comandos criados em diversas linhas (como um for ou um while, por exemplo) em uma única linha, com os comandos separados por ponto-e-vírgula (;). Isso é particularmente útil para editar comandos e portanto é uma opção setada por default pelo Bash.

dotglob

Esta opção permite que

This one allows files beginning with a dot ('.') to be returned in the results of path-name expansion.
  $ ls *bash*
  ls: impossível acessar *bash*: Arquivo ou diretório inexistente
  $ shopt -s dotglob
  $ ls *bash*
  .bash_history  .bash_logout  .bashrc

extglob

o Shell possui, alem do globbing normal (a expansão *, ? e [a-z] de nomes de arquivos e diretórios), um globbing extendido.

Acho que, em alguns casos, poderá ser bem útil, eliminando um pipe para um grep por exemplo.

São eles:

?(padrao) Casa zero ou uma ocorrência de um determinado padrao.
*(padrao) Casa zero ou mais ocorrências de um determinado padrao.
+(padrao) Casa uma ou mais ocorrências de um determinado padrao.
@(padrao) Casa com exatamente uma ocorrência de um determinado padrao.
!(padrao) Casa com qualquer coisa, exceto com padrao.

Para poder utilizá-lo precisamos executar o shopt antes. Repare que uma barra vertical (|) dentro dos parênteses equivale a um "ou" lógico. Veja os exemplos a seguir:

  $ shopt -s extglob
  $ ls
  file filename filenamename fileutils
  $ ls file?(name)
  file filename
  $ ls file*(name)
  file filename filenamename
  $ ls file+(name)
  filename filenamename
  $ ls file@(name)
  filename
  $ ls file!(name)          # divertido esse
  file filenamename fileutils
  $ ls file+(name|utils)
  filename filenamename fileutils
  $ ls file@(name|utils)    # "lembra" um {name,utils}
  filename fileutils

As principais opções do comando shopt são:

Opção Significado
-s Habilita (set) a opção
-u Desabilita (unset) a opção
-q Suprime a saída (quiet). Ótima para saber pelo código de retorno ($?) se uma opção está setada ou não

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna