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 ou .
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 . 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 -eO efeito é o mesmo.
Para desativar uma opção, você deve colocar um mais em vez de um menos:
$ set +ePor 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 # <= offMudanç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\/folderSaí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 mudouSuperpoderes 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*)
cfileAqui, 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
