De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 27 de fevereiro de 2021
Mostrarei neste artigo 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>
.
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.
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
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 |
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários