Oito opções pouco conhecidas do Bash

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 # <= on $ shopt -u cdspell # <= off 

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] #  ... $ /full/path/to/current_working_folder $ ~/[TAB] #  ... $ /full/path/to/home/folder $ $HOME/[TAB] #  ... $ /full/path/to/home/folder 

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 # <= ID    $ sleep 999 & $ exit There are running jobs. [1]+ Running sleep 999 & $ echo $$ 68125 # <= ID      $ exit There are running jobs. [1]+ Running sleep 999 & $ exit $ echo $$ $ 59316 # <=    ID   

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 !$ # <=   Enter    $ echo histverify # <=     , histverify # <=    

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 $ 

Source: https://habr.com/ru/post/pt452522/


All Articles