Trilha GNU/Linux |
Estudos |
Perguntas |
Hacks |
Recursos
Semana 7: Apelidos e funções
úteis
Importante! Este material foi elaborado para ser lido em terminais e
acompanhado (e praticado) em dispositivos de desktop!
Perguntas-chave
- Por que escrever apelidos e funções para o Bash?
- Apelidos e funções atrapalham o meu aprendizado?
- Como decidir se vou escrever um apelido, uma função ou um
script?
- Em que arguivo de início escrever meus apelidos e funções?
Por que
escrever apelidos e funções para o Bash?
Agilizar a execução de comandos longos de uso frequente.
Exemplo 1: Informações básicas da atualização do
Debian
# Atualização do cachê de pacotes...
alias up='sudo apt update && apt list --upgradable | less'
Exemplo 2: Informações mais detalhadas da
atualização do Debian
# Informações da atualização completa do sistema...
upinfo() {
local u n r h
echo 'Carregando atualizações...'
sudo apt update &> /dev/null
read u n r h <<< $(apt full-upgrade --dry-run 2> /dev/null | grep ^[0-9] | tr -cd '0-9 ')
echo "Atualizações : $u"
echo "Pacotes novos : $n"
echo "Pacotes removidos: $r"
echo "Pacotes mantidos : $h"
}
Documentar a sintaxe de comandos menos utilizados ou mais
complexos.
Exemplo 3: Criação de arquivos
tar.gz
# Arquivamento e compressão de arquivos...
# https://explainshell.com/explain?cmd=tar+-zcvf
targz () {
[[ $1 ]] || { echo 'Uso: targz DIRETÓRIO' >&2; exit 1; }
tar -zcvf $1.tar.gz $1
}
O utilitário tar empacota vários arquivos em um só, mas,
com a opção -z, o pacote é filtrado com o gzip
para ser comprimido.
Exemplo 4: Extração de arquivos
tar.gz
# Extração de tarballs...
# https://explainshell.com/explain?cmd=tar+-xvsf
alias untar='tar -xvsf'
As customizações
atrapalham o aprendizado?
- Podem atrapalhar o desenvolvimento da memória muscular, mas não o
aprendizado.
- Para customizar, é preciso aprender a utilizar os comandos
originais.
- A criação de apelidos, funções e scripts é um ótimo exercício para o
aprendizado.
- Muitas vezes, é mais fácil lembrar dos comandos originais do que dos
apelidos e funções.
Onde criar apelidos e
funções?
- Podem ser definidos no
~/.bashrc.
- Podem ser organizados em outros arquivos e carregados no
~/.bashrc.
Teste
para carregamento de arquivos externos ao ‘.bashrc’
[[ -f $HOME/.bash_aliases ]] && . $HOME/.bash_aliases
[[ -f $HOME/.bash_functions ]] && . $HOME/.bash_functions
[[ -f $HOME/.bash_envirom ]] && . $HOME/.bash_envirom
[[ -f $HOME/.bash_prompt ]] && . $HOME/.bash_prompt
Apelido, função ou script?
A decisão é muito pessoal, mas podemos observar alguns critérios…
Apelidos
- Quando o uso não envolver passagem de argumentos.
- Quando a customização do comando for apenas uma abreviação.
- Apelidos são mais adequados para uso pessoal e dificilmente serão
compartilhados.
Funções
- Quando envolver a passagem de um argumento no meio do comando.
- Quando envolver passagem de argumentos para comandos
diferentes.
- Quando não houver necessidade de especificar ou alterar
predefinições.
- Quando houver interdependências (funções em uso por outras
funções).
- Quando o ambiente do shell interativo corrente precisar ser
alterado.
- Quando a customização precisar estar disponível em todas as sessões
interativas.
Scripts
- Basicamente, os mesmos critérios para criar funções.
- Quando houver a possibilidade ou a necessidade de
compartilhamento.
- Quando houver a necessidade de especificar ou alterar
predefinições.
- Quando não houver a necessidade de alterar o ambiente da sessão
interativa.
- Quando o código for mais longo.
Importante! Apelidos e funções (além das variáveis)
são carregados no ambiente de dados da sessão do shell e, portanto,
ocupam memória.