Algumas opções do Bash são bem conhecidas e frequentemente usadas. Por exemplo, muitos escrevem no início de um script
set -o xtrace
para depuração,
set -o errexit
sair por engano ou
set -o errunset
para sair se a variável chamada não estiver configurada.
Mas existem muitas outras opções. Às vezes, eles são confusos demais descritos nos homens, por isso coletei aqui alguns dos mais úteis, com uma explicação.
Nota: O Mac pode ter uma versão mais antiga do bash (3.x, não 4.x), onde nem todas essas opções estão disponíveis. Nesse caso, olhe aqui ou aqui .set
ou shopt
?
Existem duas maneiras de definir parâmetros do bash: a partir de um script ou da linha de comando. Você pode usar os
shopt
set
e
shopt
. Ambos mudam o comportamento do shell, fazem praticamente a mesma coisa (com argumentos diferentes) e diferem em sua
origem .
set
parâmetros
set
são herdados ou emprestados dos parâmetros de outros shells, enquanto os parâmetros
shopt
criados no bash.
Se você quiser examinar as opções atuais, execute:
$ set -o $ shopt
Para ativar uma opção no
set
, é usada uma sintaxe longa ou curta:
$ set -o errunset $ set -e
O efeito é o mesmo.
Para desativar a opção, você precisa colocar um mais em vez de um menos:
$ set +e
Durante muito tempo, não me lembro dessa sintaxe, porque a lógica parece estar errada (menos ativa a opção e mais a desativa).
shopt
usa os
shopt
(mais lógicos)
-s
(conjunto) e
-u
(não configurados) para ativar e desativar as opções:
$ shopt -s cdspell
Alterações de Diretório
Existem várias opções que ajudam você a trabalhar com diretórios.
1. cdspell
Com essa configuração, o bash começará a entender erros de digitação e transferirá você para uma pasta cujo nome você digitou com erro.
$ shopt -s cdspell $ mkdir abcdefg $ cd abcdeg abcdefg $ cd ..
Eu usei essa opção por muitos anos e, muito raramente (talvez uma vez por ano), toma uma decisão muito estranha. Mas nos outros dias, o
cdspell
economiza tempo, literalmente todos os dias.
2. autocd
Se você não estiver pronto para suportar a ineficiência da entrada repetida de
cd
, poderá definir esta opção para ir para a pasta X se o comando X não existir.
$ shopt -s autocd $ abcdefg $ cd ..
Em combinação com o preenchimento automático, isso permite que você pule rapidamente para as pastas:
$ ./abc[TAB][RETURN] cd -- ./abcdefg
Apenas não
rm -rf *
pasta
rm -rf *
(sim, a propósito, isso é possível).
3. direxpand
Esta é uma opção interessante que estende as variáveis de ambiente pressionando Tab:
$ shopt -s direxpand $ ./[TAB]
Saída limpa
4. checkjobs
Essa opção interrompe a saída da sessão se os trabalhos ainda estiverem sendo executados em segundo plano.
Em vez de sair, uma lista de tarefas incompletas é exibida. Se você ainda deseja sair, digite
exit
novamente.
$ shopt -s checkjobs $ echo $$ 68125
Habilidades de Substituição
5. globstar
Esta opção oferece habilidades de substituição supernormais! Se você digitar:
$ shopt -s globstar $ ls **
então o shell mostrará recursivamente todos os diretórios e subdiretórios.
Em combinação com
direxpand
você pode ver rapidamente tudo abaixo na hierarquia:
$ shopt -s direxpand $ ls **[TAB][TAB] Display all 2033 possibilities? (y or n)
6.extglob
Esta opção ativa funções que são mais frequentemente associadas a expressões regulares. Às vezes, isso é muito útil:
$ shopt -s extglob $ touch afile bfile cfile $ ls afile bfile cfile $ ls ?(a*|b*) afile bfile $ ls !(a*|b*) cfile
Aqui, os padrões são colocados entre parênteses e separados por uma barra vertical. Aqui estão os operadores disponíveis:
? = corresponde a zero ou uma ocorrência dos padrões fornecidos
! = mostra tudo o que não corresponde aos padrões fornecidos
* = zero ou mais ocorrências
+ = uma ou mais ocorrências
@ = exatamente uma ocorrência
Proteção contra acidentes
7. histverify
No início, pode ser um pouco assustador usar o uso de comandos de início rápido do histórico de reduções
!!
e
!$
.
A opção
histverify
permite que
histverify
veja primeiro como o Bash interpreta o comando antes de realmente iniciar:
$ shopt -s histverify $ echo !$
8. Noclobber
Novamente, para proteger contra acidentes, ou seja, de sobrescrever um arquivo que já existe com o operador de redirecionamento (
>
). Isso pode ser um desastre se você não tiver um backup.
A opção
set -
proíbe essa substituição. Se necessário, você pode ignorar a proteção usando o operador
>|
:
$ touch afile $ set -C $ echo something > afile -bash: afile: cannot overwrite existing file $ echo something >| afile $