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 |
Veja a relação completa dos artigos da coluna Cantinho do Shell
Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS
Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.
Opinião dos Leitores
15 Abr 2009, 18:21
amigo, há algum tempo solicitei em um site (ou deveria ser sítio?) de SL de Portugal, que fizessem a conversão para o português europeu da minha página (www.julioneves.com), que tem um livro livre de Shell com cerca de 30.000 acessos/mês.
Acredite vc, que durante um bom tempo os portugueses criticaram a minha forma brasileira de escrever e, após intensa troca de farpas entre eles mesmos, nada foi feito. Se tivessem gastado toda a energia que gastaram nas críticas à nossa terminologia (não queriam mouse, mas sim rato; não queriam monitor, mas sim ecran; arquivo x ficheiro; ...), teriam feito a conversão, ajudando a milhares de patrícios (a thread está em http://www.gildot.org/articles/05/11/16/1015209.shtml, vejam, vale a pena).
Pq estou escrevendo isso? Pq não acredito que críticas qto à forma e ao estilo contribuam com a qualidade técnica do artigo, mas dou a maior força para críticas técnicas que nos obriguem a pensar e refletir sobre o assunto em tela.
Portanto, caro Albert, como o texto é livre, pode copiá-lo e transcrevê-lo da forma que vc achar melhor, mas procure agregar um pouco de conteúdo técnico, por favor.
--
Abração,
Julio
Cursos de Shell e Zenity nos finais de semana:
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000;
- No RJ brevemente;
- Turmas fechadas em outras cidades ligue (21) 8112-9988
15 Abr 2009, 09:13
14 Abr 2009, 23:55
14 Abr 2009, 17:41



