você está aqui: Home  → Arquivo de Mensagens

Uma pequena dica de uso do shopt

Colaboração: Júlio Cezar Neves

Data de Publicação: 13 de outubro de 2017

Neste artigo 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 arquivos iniciados em um ponto (.) sejam incluídos nos resultados da expansão de nomes.

$ 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, além 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:

Padrão Significado
?(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

Sobre o autor

Júlio Cézar Neves

O 4º UNIX do mundo nasceu na Cidade Maravilhosa, mais precisamente na Cobra Computadores, onde à época trabalhava o Julio. Foi paixão à 1ª vista! Desde então, (1980) atua nessa área como especialista em Sistemas Operacionais e linguagens de programação. E foi por essa afinidade que quando surgiu o Linux foi um dos primeiros a estudá-lo com profundidade e adotá-lo como Sistema Operacional e filosofia de vida. É autor dos livros Programação Shell Linux, 11ª edição e Bombando o Shell.


Veja a relação completa dos artigos de Júlio Cezar Neves

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script