Como criar atalhos para o terminal
Criar atalhos para o terminal pode ser muito gratificante. As vezes percebemos a necessidade apenas quando nos encontramos repetindo diversas vezes os mesmos comandos.
Talvez a estrutura de pastas e arquivos base de um projeto, criação de ambiente virtual, o processo de instalação de algum programa, instalar dependências, etc. Tudo isso pode ser resumido à apenas um comando. E ainda com a facilidade de ter o auto complete do terminal.
Neste post pretendo explicar como criar esses atalhos e também dar alguns exemplos práticos. Tomarei como base o terminal bash
e o sistema operacional Linux (Ubuntu)
(No caso do WSL
também se aplica normalmente). Mas se você tiver dicas sobre esse terminal e SO ou outros, por favor fique a vontade para compartilhar nos comentários :D
Configurar .bash_aliases e .bashrc
.bashrc
Na raiz (~
) do sistema existe um arquivo chamado .bashrc
, com configurações para o terminal. O primeiro passo é abrí-lo para garantir que o seguinte bloco de código esteja nele:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Basicamente o que isso faz é verificar se existe um arquivo chamado .bash_aliases
e então chamar o que está dentro dele. Caso não encontre esse código lá, basta adicioná-lo.
.bash_aliases
Agora é preciso criar o arquivo .bash_aliases
na pasta raiz (touch ~/.bash_aliases
). Na verdade não é que precisamos fazer dessa forma. Poderíamos adicionar o que vamos colocar nesse arquivo no próprio .bashrc
ao invés daquela condicional, porém, para fins de organização, separamos as coisas.
Feito isso basta colocar os atalhos, ou aliases (apelidos) neste arquivo. Você pode abrí-lo com vim
, nano
, vscode
, etc.
Para criar os aliases basta seguir o modelo abaixo:
alias nome-do-comando="o(s) comando(s) que quero rodar"
Simples, não é? Veja alguns exemplos:
alias dj-run="python manage.py runserver"
alias dj-super="python manage.py createsuperuser"
alias dc-up="docker-compose up"
alias dc-down="docker-compose down"
alias pg-start="sudo service postgresql start"
alias pg-stop="sudo service postgresql stop"
...
A vantagem disso também está em ter o poder do auto-complete do terminal. Assim, mesmo que você crie um comando com nome mais extenso, não haverá problema, se isso ajudar a tornar o alias mais descritivo.
Uma outra vantagem é que você ainda pode concatenar comandos, mesmo usando aliases. Por exemplo, tomando como base o comando dc-up
acima, caso eu quisesse rodá-lo com a flag --build
, poderia fazer isso sem problema.
Geralmente eu costumo prefixar os comandos de acordo com o o contexto. Acredito que fica mais organizado e fácil de lembrar. Por exemplo, se eu quiser rodar algum comando relacionado à Django
, basta digitar dj-
e depois apertar Tab
duas vezes que vai aparecer todos os comandos que iniciam com dj-
.
bash functions
Uma coisa bem interessante, é que também podemos criar aliases com funções. Assim, seria possível criar um alias que recebe argumentos na linha de comando, e muito mais.
Por mais que seja algo bem eficiente, pode acabar sendo um pouco mais complicado por conta de ter que aprender como funciona a sintaxe. Admito que o meu conhecimento nessa questão ainda é limitado. Porém, segue abaixo um exemplo, de um comando que serve para criar uma pasta e já navegar para dentro dela ao mesmo tempo:
function mkcd {
last=$(eval "echo \$$#")
if [ ! -n "$last" ]; then
echo "Enter a directory name"
elif [ -d $last ]; then
echo "\`$last' already exists"
else
mkdir $@ && cd $last
fi
}
Esse código foi tirado daqui.
Essa função pode ser colocada no arquivo .bash_aliases
normalmente. Basicamente o que ela faz é verificar se foi passado um nome para a criação da pasta e também se outra pasta com aquele nome já existe. Se tudo estiver ok, ele cria a pasta e navega para dentro dela. O nome da função é o nome do comando que deverá ser digitado no terminal. Exemplo:
mkcd minha-nova-pasta
Para falar a verdade, as verificações feitas nessa função servem apenas para retornar mensagens de erro mais amigáveis. Porém, mesmo se você retirar as condicionais, vai funcionar da mesma forma, só que as mensagens de erro serão as mensagens padrão do SO, e por se tratar de uma junção de dois comandos, ele vai mostrar o erro referente apenas ao primeiro comando que der errado.
Acredito que esse exemplo simples já é o suficiente para começarmos a brincar com funções e aprender o básico da sintaxe.
Conclusão
Atalhos para o terminal podem ser muito úteis. Caso você perceba que algo está ficando repetitivo, ou que sempre segue algum padrão, será que seria possível criar algum alias que facilitaria o processo?
Você tem algum alias que usa e gostaria de compartilhar, ou alguma outra dica sobre o assunto? Comente aqui em baixo! :D