Discussion:
[shell-script] pattern match no bash
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-10 17:19:17 UTC
Permalink
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz. Porém
não quero colocar alguns deles como: /proc, /sys, /dev

Dentro do script eu coloquei o seguinte comando usando pattern match:
du -sh /!(proc|sys|dev)

se eu executar o script aparece o seguinte erro:
../teste.sh: line 9: syntax error near unexpected token `('
../teste.sh: line 9: `du -sh /!(proc|sys|dev)'

porém se eu executar o mesmo comando direto no shell funciona.

Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release (x86_64-suse-linux-gnu)
Vinicius Costa Carvalho vinicius@carvalho.inf.br [shell-script]
2018-08-10 17:36:09 UTC
Permalink
Tenta:
du -sh /\!(proc|sys|dev)
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz. Porém
não quero colocar alguns deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release (x86_64-suse-linux-gnu)
--
Vinicius Costa Carvalho

"Se enxerguei mais longe, foi porque me apoiei sobre os ombros de gigantes."
*Isaac Newton*
빠는 Leonardo Goretti leonardogoretti@gmail.com [shell-script]
2018-08-10 17:46:06 UTC
Permalink
Tenta

du -hsx --exclude=/{proc,sys,dev} /*

Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz. Porém
não quero colocar alguns deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release (x86_64-suse-linux-gnu)
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166

Gtalk: ***@gmail.com
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-10 18:43:33 UTC
Permalink
Vinicius Costa Carvalho:

Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Leonardo Goretti:

Funcionou certinho. Muito obrigado!

Agora fica a dúvida do porque o comando que citei não funciona em um script
e em linha de comando funciona....

Em sex, 10 de ago de 2018 às 14:46, 빠는 Leonardo Goretti
Post by 빠는 Leonardo Goretti ***@gmail.com [shell-script]
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz..
Porém não quero colocar alguns deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release
(x86_64-suse-linux-gnu)
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
Tiago Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-08-10 19:48:16 UTC
Permalink
Como vc declarou o hashbang do script?

Se foi #!/bin/sh

Isso é outro interpretador de comandos ( sh não é o bash ) e provavelmente
ele não entendeu a sintaxe mais avançada.
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Funcionou certinho. Muito obrigado!
Agora fica a dúvida do porque o comando que citei não funciona em um
script e em linha de comando funciona....
Em sex, 10 de ago de 2018 às 14:46, 빠는 Leonardo Goretti
Post by 빠는 Leonardo Goretti ***@gmail.com [shell-script]
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz.
Porém não quero colocar alguns deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release
(x86_64-suse-linux-gnu)
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
--
Tiago B. Peczenyj

http://about.me/peczenyj
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-10 20:00:27 UTC
Permalink
Foi #!/bin/bash
Com você funciona se colocar o #!/bin/bash ?
Post by Tiago Peczenyj ***@gmail.com [shell-script]
Como vc declarou o hashbang do script?
Se foi #!/bin/sh
Isso é outro interpretador de comandos ( sh não é o bash ) e provavelmente
ele não entendeu a sintaxe mais avançada.
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Funcionou certinho. Muito obrigado!
Agora fica a dúvida do porque o comando que citei não funciona em um
script e em linha de comando funciona....
Em sex, 10 de ago de 2018 às 14:46, 빠는 Leonardo Goretti
Post by 빠는 Leonardo Goretti ***@gmail.com [shell-script]
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz.
Porém não quero colocar alguns deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release
(x86_64-suse-linux-gnu)
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
--
Tiago B. Peczenyj
http://about.me/peczenyj
빠는 Leonardo Goretti leonardogoretti@gmail.com [shell-script]
2018-08-10 18:54:16 UTC
Permalink
Aqui seu exemplo não funcionou em linha de comando não....


Em sex, 10 de ago de 2018 às 15:52, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Funcionou certinho. Muito obrigado!
Agora fica a dúvida do porque o comando que citei não funciona em um
script e em linha de comando funciona....
Em sex, 10 de ago de 2018 às 14:46, 빠는 Leonardo Goretti
Post by 빠는 Leonardo Goretti ***@gmail.com [shell-script]
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz.
Porém não quero colocar alguns deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release
(x86_64-suse-linux-gnu)
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166

Gtalk: ***@gmail.com
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
phfbettega@yahoo.com.br [shell-script]
2018-08-11 13:43:21 UTC
Permalink
Olá Tiago, tive o mesmo resultado aqui. Na linha de comando funciona, num script não.
Parece ser a opção extglob ligada ou não. Pelo jeito depende da distro.
Eu ligo no .bash_profile, mas no ambiente do script a opção fica desligada.
Experimente colocar 'shopt -s extglob' no início do script.
Abraços Paulo
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Funcionou certinho. Muito obrigado!
Agora fica a dúvida do porque o comando que citei não funciona em um script e em linha de comando funciona....
__
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
__
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz. Porém não quero colocar alguns
deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release (x86_64-suse-linux-gnu)
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61)  97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
Responder através da web
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-12 22:01:22 UTC
Permalink
Acertou em cheio Paulo.
Eu estava testando no meu trabalho com o OpenSuSE 15, mas em casa uso o
Gentoo e deu o mesmo problema.
Depois que ativei a opção extglob da forma como você descreveu, o
problema parou de ocorrer.

Algo que ainda não entendo muito são os parâmetros do Bash. Com certeza
é algo que preciso parar para dar uma boa lida.

Para quem não sabe também, no manual a opção extglob diz o seguinte:

/*extglob*//: If set, the extended pattern matching features described
above under //*Pathname Expansion*//are enabled. /(Era exatamente o que
eu precisava)

Obrigado a todos.
Post by ***@yahoo.com.br [shell-script]
 
Olá Tiago, tive o mesmo resultado aqui. Na linha de comando funciona, num script não.
Parece ser a opção extglob ligada ou não. Pelo jeito depende da distro.
Eu ligo no .bash_profile, mas no ambiente do script a opção fica desligada.
Experimente colocar 'shopt -s extglob' no início do script.
Abraços Paulo
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Funcionou certinho. Muito obrigado!
Agora fica a dúvida do porque o comando que citei não funciona em um
script e em linha de comando funciona....
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Em sex, 10 de ago de 2018 às 14:46, 빠는 Leonardo Goretti
__
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
__
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz.
Porém não quero colocar alguns
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release
(x86_64-suse-linux-gnu)
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61)  97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
Responder através da web
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-08-13 14:07:57 UTC
Permalink
Há muito tempo, nessa mesma lista o Tiago Peczenyj (PacMan) deu uma dica
sobre extglob que adaptei para meu livro. Veja:

Estendendo pesquisa de arquivos pelo nome

O *Shell *possui, além do *globbing* normal - que são os curingas
conhecidos por todos para expansão de nomes de arquivos e diretórios (*, ? e
[a-z]) - um *globbing* estendido. Este *globbing* estendido, em alguns
casos, poderá ser muito útil e sempre será mais veloz que o código que ele
substituirá, como o pipe junto com o grep. (normalmente se faria ls
<ESCOPO> | grep ... ou echo <ESCOPO> | grep ...)

Nas linhas a seguir, LISTA contém um ou mais padrões separados por uma
barra vertical (|), que, diga-se de passagem, é tratada como um OU lógico
em *Expressões Regulares* e em diversos comandos que em sua sintaxe aceitam
a formação de padrões de pesquisa usando os caracteres coringa (como o
comando case, por exemplo). Veja:

-

Casa zero ou uma ocorrência de LISTA.

*?(LISTA)*

-

Casa zero ou mais ocorrências de LISTA (exatamente como uma *Express**ão**
Regular*).

**(LISTA)*

-

Casa uma ou mais ocorrências de LISTA (exatamente como uma *Express**ão**
Regular*).

*+(LISTA)*

-

Casa com exatamente uma ocorrência de LISTA.

*@(LISTA)*

-

Casa com qualquer coisa, exceto com LISTA (A exclamação (!) em diversos
comandos (como exemplo o ls) é tratado como negação).

*!(LISTA)*

Para poder utilizá-los precisa executar o comando shopt conforme o exemplo
a seguir:

*$ shopt -s extglob*

*$ ls arq**

arq arqdados arqdadosdados arqutils

*$ ls arq?(dados)*

arq arqdados

*$ ls arq*(dados)*

arq arqdados arqdadosdados

*$ ls arq+(dados)*

arqdados arqdadosdados

*$ ls arq@(dados)*

arqdados

*$ ls arq!(dados) **Divertido esse*

arq arqdadosdados arqutils

*$ ls arq+(dados|utils)*

arqdados arqdadosdados arqutils

*$ ls arq@(dados|utils) **O mesmo que ls arq {dados,utils}*

arqdados arqutils

Obrigado, Tiago Peczenyj!

O Tiago me deu as dicas anteriores, mas existem outras... teste as <opcoes> a
seguir dentro do comando shopt -s <opcoes>.

cdspell

Com essa opção ativada, 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

Já viu que essa é uma boa opção para você ter no seu .bashrc, não é?

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 reaproveitá-los do history, sendo portanto é uma opção ativada
por *default* pelo *bash*.

dotglob

Essa opção permite que nomes de arquivos começados por um ponto (.), conhecidos
como “arquivos escondidos”, sejam expandidos com os metacaracteres curinga.

*$ ls *bash* *

ls: impossível acessar *bash*: Arquivo ou diretório inexistente

*$ shopt -s dotglob*

*$ ls *bash**

..bash_history .bash_logout .bashrc
Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l.com.br/cursos/educacao
<http://www.dicas-l.com.br/cursos/educacao>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *

*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*

Nosso time de instrutores *in company* é formado somente por
autores
de
*Best Sellers *laureados sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico










Em dom, 12 de ago de 2018 às 19:02, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Acertou em cheio Paulo.
Eu estava testando no meu trabalho com o OpenSuSE 15, mas em casa uso o
Gentoo e deu o mesmo problema.
Depois que ativei a opção extglob da forma como você descreveu, o
problema parou de ocorrer.
Algo que ainda não entendo muito são os parâmetros do Bash.. Com certeza
é algo que preciso parar para dar uma boa lida.
/*extglob*//: If set, the extended pattern matching features described
above under //*Pathname Expansion*//are enabled. /(Era exatamente o que
eu precisava)
Obrigado a todos.
Post by ***@yahoo.com.br [shell-script]
Olá Tiago, tive o mesmo resultado aqui. Na linha de comando funciona,
num script não.
Parece ser a opção extglob ligada ou não. Pelo jeito depende da distro.
Eu ligo no .bash_profile, mas no ambiente do script a opção fica desligada.
Experimente colocar 'shopt -s extglob' no início do script.
Abraços Paulo
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Funcionou certinho. Muito obrigado!
Agora fica a dúvida do porque o comando que citei não funciona em um
script e em linha de comando funciona....
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Em sex, 10 de ago de 2018 às 14:46, 빠는 Leonardo Goretti
__
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
__
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz.
Porém não quero colocar alguns
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release
(x86_64-suse-linux-gnu)
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
Responder através da web
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-14 15:13:04 UTC
Permalink
Muito obrigado mestre Julio. Eu tenho seu livro, vou dar uma olhada.
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Há muito tempo, nessa mesma lista o Tiago Peczenyj (PacMan) deu uma dica
Estendendo pesquisa de arquivos pelo nome
O *Shell *possui, além do *globbing* normal - que são os curingas
conhecidos por todos para expansão de nomes de arquivos e diretórios (*,
? e [a-z]) - um *globbing* estendido. Este *globbing* estendido, em
alguns casos, poderá ser muito útil e sempre será mais veloz que o código que
ele substituirá, como o pipe junto com o grep. (normalmente se faria ls
<ESCOPO> | grep ... ou echo <ESCOPO> | grep ...)
Nas linhas a seguir, LISTA contém um ou mais padrões separados por uma
barra vertical (|), que, diga-se de passagem, é tratada como um OU lógico
em *Expressões Regulares* e em diversos comandos que em sua sintaxe
aceitam a formação de padrões de pesquisa usando os caracteres coringa
-
Casa zero ou uma ocorrência de LISTA.
*?(LISTA)*
-
Casa zero ou mais ocorrências de LISTA (exatamente como uma *Express*
*ão** Regular*).
**(LISTA)*
-
Casa uma ou mais ocorrências de LISTA (exatamente como uma *Express*
*ão** Regular*).
*+(LISTA)*
-
Casa com exatamente uma ocorrência de LISTA.
-
Casa com qualquer coisa, exceto com LISTA (A exclamação (!) em
diversos comandos (como exemplo o ls) é tratado como negação).
*!(LISTA)*
Para poder utilizá-los precisa executar o comando shopt conforme o
*$ shopt -s extglob*
*$ ls arq**
arq arqdados arqdadosdados arqutils
*$ ls arq?(dados)*
arq arqdados
*$ ls arq*(dados)*
arq arqdados arqdadosdados
*$ ls arq+(dados)*
arqdados arqdadosdados
arqdados
*$ ls arq!(dados) **Divertido esse*
arq arqdadosdados arqutils
*$ ls arq+(dados|utils)*
arqdados arqdadosdados arqutils
arqdados arqutils
Obrigado, Tiago Peczenyj!
O Tiago me deu as dicas anteriores, mas existem outras... teste as
<opcoes> a seguir dentro do comando shopt -s <opcoes>.
cdspell
Com essa opção ativada, 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
Já viu que essa é uma boa opção para você ter no seu .bashrc, não é?
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 reaproveitá-los do history, sendo portanto é uma
opção ativada por *default* pelo *bash*.
dotglob
Essa opção permite que nomes de arquivos começados por um ponto (.), conhecidos
como “arquivos escondidos”, sejam expandidos com os metacaracteres curinga.
*$ ls *bash* *
ls: impossível acessar *bash*: Arquivo ou diretório inexistente
*$ shopt -s dotglob*
*$ ls *bash**
.bash_history ..bash_logout .bashrc
Abraços,
Julio
*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l.com.br/cursos/educacao
<http://www.dicas-l.com.br/cursos/educacao>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Nosso time de instrutores *in company* é formado somente por
autores
de
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Em dom, 12 de ago de 2018 às 19:02, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Acertou em cheio Paulo.
Eu estava testando no meu trabalho com o OpenSuSE 15, mas em casa uso o
Gentoo e deu o mesmo problema.
Depois que ativei a opção extglob da forma como você descreveu, o
problema parou de ocorrer.
Algo que ainda não entendo muito são os parâmetros do Bash. Com certeza
é algo que preciso parar para dar uma boa lida.
/*extglob*//: If set, the extended pattern matching features described
above under //*Pathname Expansion*//are enabled. /(Era exatamente o que
eu precisava)
Obrigado a todos.
Post by ***@yahoo.com.br [shell-script]
Olá Tiago, tive o mesmo resultado aqui. Na linha de comando funciona,
num script não.
Parece ser a opção extglob ligada ou não. Pelo jeito depende da distro.
Eu ligo no .bash_profile, mas no ambiente do script a opção fica desligada.
Experimente colocar 'shopt -s extglob' no início do script.
Abraços Paulo
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Cara, não deu certo sua dica... mesmo erro. Mas obrigado.
Funcionou certinho. Muito obrigado!
Agora fica a dúvida do porque o comando que citei não funciona em um
script e em linha de comando funciona....
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Em sex, 10 de ago de 2018 às 14:46, 빠는 Leonardo Goretti
__
Tenta
du -hsx --exclude=/{proc,sys,dev} /*
Em sex, 10 de ago de 2018 às 14:32, Tiago Tarifa Munhoz
__
Pessoal,
estou fazendo um script que coleta o tamanho dos diretórios na raiz.
Porém não quero colocar alguns
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
deles como: /proc, /sys, /dev
du -sh /!(proc|sys|dev)
./teste.sh: line 9: syntax error near unexpected token `('
./teste.sh: line 9: `du -sh /!(proc|sys|dev)'
porém se eu executar o mesmo comando direto no shell funciona.
Há poderia dar algum pitaco nesse problema?
versão do bash: GNU bash, version 4.4.19(1)-release
(x86_64-suse-linux-gnu)
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
--
Leonardo Goretti
Gerência e Operações
Analista de infraestrutura - GNU/LINUX
Instrutor GNU/LINUX
Itil V3
Celular: +55 (61) 97402-3166
U2Ugdm9jw6ogZGVjcnlwdG91IMOpIHBvciBxdWUgc2FiZSBkYXMgY29pc2FzCg==
----------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
Responder através da web
Loading...