# 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 ```bash # 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 ```bash # 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` ```bash # 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` ```bash # 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' ```bash [[ -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.