Linux / Comando unalias: remover atalhos do Bash

unalias remove aliases do processo Bash atual. Use unalias nome para remover um atalho ou unalias -a para remover todos. O comando não apaga definições salvas nos arquivos de inicialização nem altera aliases já carregados em outros shells.

Um alias é um atalho de texto expandido pelo shell, o interpretador de comandos. Se ele aplica opções inesperadas, confira sua definição antes de removê-lo. O guia de alias no Bash explica a criação e a persistência desses atalhos.

O que é o comando unalias?

alias registra um nome e seu texto de substituição; unalias elimina esse registro do processo atual. Depois, o mesmo nome pode ser interpretado como função, comando interno ou arquivo executável. PATH é a lista de diretórios em que o shell procura arquivos de comandos.

Os exemplos usam Bash. Outros shells podem ter opções ou arquivos de configuração diferentes. Para acompanhar a resolução dos nomes e as operações relacionadas, consulte a referência de comandos Linux em português.

Sintaxe básica

unalias [-a] [nome ...]

O bloco anterior é um esquema; não copie os colchetes nem as reticências. Informe pelo menos um nome ou use -a. Sem nome e sem essa opção, o Bash mostra a instrução de uso e retorna falha.

Remover um alias específico

O bloco abaixo cria um alias de teste e o remove na linha seguinte. Se ll já existir, confira e preserve sua definição antes de substituí-la. Depois da remoção, alias ll deve informar que ele não está definido.

alias ll='ls -alF'
unalias ll

Os blocos são exemplos independentes. Para testar a inspeção abaixo, defina novamente alias ll='ls -alF' antes de executá-la. A primeira linha mostra a definição, a segunda remove o alias e a última consulta o nome restante, sem executá-lo.

alias ll
unalias ll
type ll

Se não houver função ou arquivo chamado ll, type ll retorna falha após a remoção, o que é esperado. Se houver outro candidato, ele continua existindo. Use type para verificar as categorias e os candidatos, por exemplo type -a ll.

Remover vários aliases de uma vez

unalias ll la grep

No Bash, um nome que não é alias causa estado diferente de zero. Isso não significa que a operação inteira foi desfeita: outros aliases indicados podem ter sido removidos. Consulte os nomes depois, em vez de tratar uma falha como ausência de qualquer alteração.

Remover todos os aliases

Antes de remover tudo, veja as definições atuais. A linha abaixo somente as imprime; não grava um backup em arquivo. Se precisar recuperá-las, copie a saída para um arquivo de texto novo, como aliases-backup.sh, sem sobrescrever um arquivo existente.

alias -p

unalias -a remove todas as definições do processo atual, inclusive personalizações fornecidas pela distribuição. Compare com a listagem preservada e prefira remover só o nome envolvido no problema, quando possível.

Depois de preservar o que precisa, a próxima linha faz a remoção geral. Ela não remove funções, variáveis, arquivos de programas nem definições dos arquivos de inicialização.

unalias -a

Diferença entre remoção temporária e remoção permanente

Remover no shell atual

unalias só altera a tabela de aliases do Bash em que é executado. Um novo shell pode definir novamente o atalho ao ler sua configuração. Remover um alias em um script filho também não o remove do terminal pai.

Impedir a recriação em novos terminais

Para impedir a recriação, localize o arquivo que define o alias, guarde uma cópia antes de editá-lo e remova ou comente apenas a linha pertinente. A busca abaixo procura uma forma comum de definição de ll nos dois arquivos do usuário.

grep -n "alias ll=" ~/.bashrc ~/.bash_aliases 2>/dev/null

Essa busca não é completa: espaços diferentes, nomes construídos dinamicamente ou outros arquivos podem esconder a origem. 2>/dev/null oculta mensagens como “arquivo inexistente” ou “permissão negada”; ausência de resultado não prova ausência de definição. Depois de editar, use unalias ll no shell atual, se ele ainda estiver definido. Abrir um novo Bash permite verificar se a configuração parou de recriá-lo.

Recarregar não equivale a remover. A linha seguinte executa todo o conteúdo de ~/.bashrc; não desfaz um alias que ficou na memória só porque sua definição foi apagada do arquivo. Use-a apenas depois de revisar o arquivo e de remover separadamente o alias atual, quando essa for a intenção.

source ~/.bashrc

Os arquivos carregados dependem da distribuição e do modo de inicialização. Bash interativo sem login lê ~/.bashrc; um shell de login pode chegar a ele por seu perfil. ~/.bash_aliases, /etc/bash.bashrc ou arquivos em /etc/profile.d/ só participam quando a configuração correspondente os carrega. Confira as regras de inicialização do Bash antes de alterar arquivos compartilhados.

Executar uma vez sem aplicar o alias

Para executar uma vez sem aplicar o alias, pode bastar uma barra invertida no nome ou um caminho absoluto confirmado. As linhas abaixo executam o nome ou arquivo indicado; quando chegam ao ls padrão, listam o diretório atual.

\ls
/usr/bin/ls

\ls impede a expansão do alias ls, mas ainda pode chamar uma função. Um caminho absoluto evita a busca por nome; confirme primeiro com type -P ls se /usr/bin/ls é o caminho adequado no seu sistema. Ele não é universal entre instalações.

Distinguir alias, função, variável e arquivo

Alvo Operação de remoção Como verificar
Alias unalias nome alias nome ou type nome
Funções do shell unset -f nome declare -F nome ou type nome
Variável do shell unset -v nome declare -p nome
Arquivo executável Use comandos de gerenciamento de arquivos type -a nome ou command -v nome

unalias não remove funções ou arquivos homônimos. Para distinguir variável e função ao usar unset, a tabela especifica -v ou -f. Sem opção, o Bash pode remover uma função se não encontrar uma variável com o nome indicado; consulte a documentação de unset.

Remover somente se o alias existir

O trecho seguinte consulta se ll é um alias e só então o remove. Rode-o no shell que contém a definição. Ele não chama ll e descarta os diagnósticos da consulta; se o alias não existir, simplesmente não entra no bloco.

if alias ll >/dev/null 2>&1; then
  unalias ll
fi

Por padrão, um Bash não interativo não expande aliases nem herda os aliases locais do terminal pai. Ativar expand_aliases não importa essas definições. Escreva scripts com dependências explícitas; um script separado não limpa aliases do processo que o chamou.

Problemas comuns

O alias reaparece em outro terminal

Algum arquivo carregado pelo novo shell redefine o alias. Inspecione o perfil, ~/.bashrc e os arquivos que eles leem; ~/.bash_aliases não é carregado automaticamente apenas por ter esse nome. Mude a definição na origem e confira em uma nova sessão.

A mensagem contém “not found”

Leia a mensagem inteira. Algo como bash: unalias: ll: not found indica que ll não está definido como alias nesse processo. Já unalias: command not found indica que o próprio comando não foi encontrado: confirme o shell em uso e consulte type unalias. No Bash, um comando interno também pode ter sido desabilitado. Os textos exatos variam com versão e idioma.

O comportamento ainda é diferente

Confira type -a nome: pode haver uma função ou executáveis em caminhos diferentes. O hash guarda caminhos de executáveis, não aliases; hash -r limpa esse cache, mas não remove uma função. Execute a consulta em outra linha: um alias já expandido durante a leitura de uma linha ou comando composto não é “desexpandido” por um unalias executado depois nessa mesma unidade.

Escolher a operação conforme a situação

Situação Método recomendado
Execute o comando original apenas uma vez Use \nome para evitar a expansão do alias ou execute um caminho absoluto confirmado.
Remover alias no terminal atual Use unalias nome.
Remover temporariamente os efeitos de todos os aliases Verifique a lista e então use unalias -a.
Remover também em um novo terminal Modificar o arquivo de inicialização onde o alias está definido.
Remover uma função com o mesmo nome Use unset -f nome.

Perguntas frequentes

Posso restaurar os aliases após unalias -a?

Não há um comando de desfazer. Se você preservou as definições em aliases-backup.sh, revise o arquivo e use source ./aliases-backup.sh para recriá-las no processo atual. Recarregar um arquivo de inicialização também pode recriar aliases persistentes, mas executa todo o seu conteúdo e não recupera definições locais que não foram salvas.

unalias afeta outros terminais?

Não. Cada processo de shell de um terminal tem sua própria tabela de aliases separada, portanto, o unalias executado no shell atual não afeta diretamente outros shells.

O que acontece ao digitar o nome removido?

O Bash procura por funções restantes, comandos internos e arquivos executáveis em PATH de acordo com as regras de busca de comandos. O resultado real da seleção pode ser verificado com type nome.

Documentação oficial