Oito opções de Bash pouco conhecidas

Algumas opções do Bash são bem conhecidas e frequentemente usadas. Por exemplo, muitas pessoas escrevem no início do roteiro

definir -o xtrace

para depuração,

set -o errexit

sair por engano ou

set -o conjunto de erros

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

Mas existem muitas outras opções. Às vezes eles são descritos de forma muito confusa em manas, então reuni alguns dos mais úteis aqui, com explicação.

Nota: Os Macs podem ter 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, veja aqui ou aqui.

set ou shopt?

Existem duas maneiras de definir opções do bash: a partir de um script ou da linha de comando. Você pode usar comandos integrados set и shopt. Ambos alteram o comportamento do shell, fazem praticamente a mesma coisa (com argumentos diferentes), mas diferem em suas origem. Opções set são herdados ou emprestados de parâmetros de outros shells, enquanto os parâmetros shopt criado no bash.

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

$ set -o
$ shopt

Para ativar a opção em set Sintaxe longa ou curta é usada:

$ set -o errunset
$ set -e

O efeito é o mesmo.

Para desabilitar a opção, você precisa colocar um sinal de mais em vez de menos:

$ set +e

Por muito tempo não consegui lembrar dessa sintaxe porque a lógica parecia errada (um sinal de menos ativa a opção e um sinal de mais a desativa).

В shopt sinalizadores (mais lógicos) são usados ​​para ativar e desativar opções -s (conjunto) e -u (não definido):

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

Alterando diretórios

Existem várias opções que ajudam você a trabalhar com diretórios.

1.cdspell

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

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

Uso essa opção há 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. CD automático

Se você não está disposto a aceitar a ineficiência de múltiplas entradas cd, então você pode definir esta opção para mover para a pasta X se o comando X não existir.

$ shopt -s autocd
$ abcdefg
$ cd ..

Combinado com o preenchimento automático, isso permite alternar rapidamente entre as pastas:

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

Só não dê um nome à pasta rm -rf * (sim, aliás, isso é possível).

3.direxpandir

Esta é uma opção interessante que expande 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. trabalhos de verificação

Esta opção interrompe o logout da sessão se ainda houver trabalhos em execução em segundo plano.

Em vez de sair, é exibida uma lista de tarefas inacabadas. Se você ainda quiser sair, entre novamente exit.

$ 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 процесса  изменился

Superpoderes de substituição

5.globstar

Esta opção oferece superpoderes de substituição! Se você inserir:

$ shopt -s globstar
$ ls **

então o shell mostrará todos os diretórios e subdiretórios recursivamente.

Em combinação com direxpand Você pode visualizar rapidamente tudo que está abaixo na hierarquia:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Esta opção ativa recursos que são mais comumente associados 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 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. verificação histórica

Pode ser um pouco assustador no início usar os comandos de inicialização rápida do histórico de abreviações !! и !$.

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

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Nocturno

Mais uma vez, para proteger contra acidentes, nomeadamente contra a substituição de um ficheiro que já existe pelo operador de redireccionamento (>). Isso pode ser um desastre se você não tiver um backup.

Opção set -С proíbe tal 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
$

Fonte: habr.com

Adicionar um comentário