Oito opções do Bash pouco conhecidas

Algumas opções do Bash são bem conhecidas e frequentemente utilizadas. Por exemplo, muitos no início do script escrevem

set -o xtrace

para depuração,

set -o errexit

para sair em caso de erro ou

set -o errunset

para sair se uma variável chamada não estiver definida.

Mas existem muitas outras opções. Às vezes, elas são descritas de maneira confusa nos manuais, por isso compilei aqui algumas das mais úteis, com explicações.

Observação: no Mac pode estar uma versão mais antiga do Bash (3.x em vez de 4.x), onde nem todas essas opções estão disponíveis. Neste caso, consulte aqui ou aqui.

set ou shopt?

Existem duas maneiras de configurar as opções do bash: a partir de um script ou da linha de comando. É possível usar comandos internos set e shopt. Ambos alteram o comportamento do shell, realizando em grande parte a mesma coisa (com argumentos diferentes), e se diferenciam pela sua origem. As opções set são herdadas ou emprestadas de opções de outros shells, enquanto as opções shopt são criadas no bash.

Se você quiser ver as opções atuais, execute:

$ set -o
$ shopt

Para ativar uma opção em set usa-se a sintaxe longa ou curta:

$ set -o errunset
$ set -e

O efeito é o mesmo.

Para desativar uma opção, você deve colocar um mais em vez de um menos:

$ set +e

Por muito tempo eu não consegui lembrar essa sintaxe, pois a lógica parece errada (menos ativa a opção, e mais desativa).

Em shopt para ativar e desativar opções são utilizados (mais lógicos) sinais -s (set) e -u (unset):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Mudança de diretórios

Existem algumas opções que ajudam a trabalhar com diretórios.

1. cdspell

Com essa configuração, o bash começará a entender erros de digitação e o levará à pasta cujo nome você digitou incorretamente.

$ 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) ela toma uma decisão muito estranha. Mas em outros dias cdspell economiza tempo, literalmente todos os dias.

2. autocd

Se você não está disposto a lidar com a ineficiência de digitar várias vezes cd, pode ativar essa opção para mover-se para a pasta X, se o comando X não existir.

$ shopt -s autocd
$ abcdefg
$ cd ..

Combinado com a conclusão automática, isso permite pular rapidamente entre as pastas:

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

Apenas não nomeie a pasta rm -rf * (sim, aliás, isso é possível).

3. direxpand

Essa é uma opção legal, que expande variáveis de ambiente ao pressionar Tab:

$ shopt -s direxpand
$ .\/[TAB]     # é substituído por...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB]     # é substituído por...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] #  é substituído por...
$ \/full\/path\/to\/home\/folder

Saída limpa

4. checkjobs

Este parâmetro interrompe a saída da sessão se houver tarefas em execução em segundo plano.

Em vez de sair, uma lista de tarefas não concluídas é exibida. Se você ainda quiser sair, digite novamente sigreturn.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID do processo para o shell
$ sleep 999 &
$ exit
Há trabalhos em execução.
[1]+  Running                 sleep 999 &
$ echo $$
68125             # <= ID do processo para o shell igual
$ exit
Há trabalhos em execução.
[1]+  Running                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= desta vez o ID do processo mudou

Superpoderes de expansão

5. globstar

Esta opção lhe dá superpoderes de expansão! 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 é possível navegar rapidamente por tudo que está abaixo na hierarquia:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Exibir todas as 2033 possibilidades? (y ou n) 

6. extglob

Esta opção ativa funções que geralmente estão 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:

? = соответствует нулю или одному вхождению заданных шаблонов
! = показать всё, что не соответствует заданным шаблонам
* = ноль или более вхождений
+ = одно или более вхождений
@ = ровно одно вхождение

Proteção contra acidentes

7. histverify

No começo, pode parecer um pouco intimidante usar o lançamento rápido de comandos da história com os atalhos !! e !$.

Opção histverify permite que você veja como o Bash interpreta o comando antes que ele realmente seja executado:

$ shopt -s histverify
$ echo !$          # <= Ao pressionar Enter, o comando não é executado
$ echo histverify  # <= Ele é primeiro exibido na tela,
histverify         # <= e depois executado 

8. Noclobber

Mais uma vez, para proteção contra acidentes, especificamente contra a sobrescrita de um arquivo que já existe com o operador de redirecionamento (>). Isso pode ser desastroso se você não tiver um backup.

Opção set -C proíbe tal sobrescrita. Se necessário, você pode contornar a proteção usando o operador >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: não é possível sobrescrever arquivo existente
$ echo something >| afile
$

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster