Comando unalias in Bash: rimuovere uno o tutti gli alias

unalias è un builtin di Bash, cioè un comando interno alla shell, che rimuove gli alias dalla sessione corrente. Potete eliminare un nome specifico o tutti gli alias con -a; le definizioni nei file di avvio rimangono invariate.

Usatelo per diagnosticare opzioni inattese o per smettere di usare una scorciatoia nella sessione corrente. Per evitare che l’alias ricompaia nelle nuove sessioni occorre intervenire anche sul file che lo definisce.

Che cosa rimuove unalias?

alias associa un nome a un testo sostitutivo; unalias rimuove quell’associazione. Dopo la rimozione, Bash può ancora trovare una funzione, un builtin o un eseguibile esterno con lo stesso nome. La rimozione di un alias non equivale alla disinstallazione di un programma.

Questa guida riguarda Bash. La rimozione per nome e l’opzione -a sono definite anche da POSIX, lo standard per le interfacce dei sistemi di tipo Unix; file di configurazione e altri dettagli dipendono dalla shell e dal sistema.

Sintassi di base

unalias [-a] [name...]

Nella sintassi, name è il nome dell’alias da sostituire con un nome reale. Indicate almeno un nome oppure usate -a; in Bash una chiamata senza entrambi produce un errore d’uso. La rimozione riuscita non stampa un risultato e restituisce stato 0.

Rimuovere un alias specifico

alias ll='ls -alF'
unalias ll

Il primo blocco crea ll e lo rimuove subito. Per osservare la situazione prima e dopo, il blocco seguente lo definisce di nuovo, ne mostra il valore, lo rimuove e controlla come Bash interpreta il nome:

alias ll='ls -alF'
alias ll
unalias ll
type ll

Se non esiste un altro comando chiamato ll, l’ultimo type ll segnala «non trovato» e restituisce uno stato diverso da zero: è l’esito atteso della prova. Se esiste una funzione o un eseguibile omonimo, vedrete invece quel candidato. Usate type -a ll per esaminare tutte le corrispondenze.

Rimuovere più alias insieme

unalias ll la grep

Questo esempio presuppone che ll, la e grep siano alias definiti. In Bash, se uno dei nomi non è definito come alias, unalias stampa un messaggio diagnostico e restituisce uno stato diverso da zero. Gli altri nomi validi possono comunque essere rimossi: il fallimento non annulla le rimozioni già effettuate. Controllate poi l’elenco con alias -p.

Rimuovere tutti gli alias

unalias -a

unalias -a svuota la tabella degli alias della shell corrente, comprese eventuali definizioni fornite dalla distribuzione. Per una diagnosi provatelo in una sessione temporanea, così potete chiuderla senza perdere le definizioni delle altre sessioni.

alias -p stampa le definizioni, senza salvarle da solo in un file. Per conservarle, prima della rimozione potete usare alias -p > alias-salvati.bash scegliendo un nome di file libero, così non sovrascrivete un file esistente. Aprite e controllate il file prima di ricaricarlo con source ./alias-salvati.bash: source esegue i comandi che contiene.

alias -p

Differenza tra rimozione temporanea e rimozione permanente

Agire sulla shell corrente

unalias modifica solo il processo Bash in cui viene eseguito. Non cambia la tabella degli alias di altre shell già aperte né il contenuto dei file di configurazione. Un comando eseguito in una subshell o in uno script separato non rimuove un alias dalla shell che lo ha avviato.

Impedire la definizione nelle nuove sessioni

Trovate la definizione, conservate una copia del file con il vostro editor, quindi eliminate o commentate soltanto la riga interessata. Un Bash interattivo non di login legge ~/.bashrc; un Bash di login legge il primo file disponibile tra ~/.bash_profile, ~/.bash_login e ~/.profile, che può a sua volta caricare altri file. ~/.bash_aliases viene usato solo se è caricato dalla configurazione esistente. La ricerca seguente è un primo controllo di due file comuni:

grep -n -- "alias ll=" ~/.bashrc ~/.bash_aliases

La ricerca mostra i numeri di riga, ma non trova necessariamente definizioni con spazi o apici diversi, nomi costruiti dinamicamente o altri file caricati. Nel manuale di GNU grep, lo stato 1 indica nessuna corrispondenza e 2 un errore, per esempio un file mancante. Dopo aver rimosso la definizione, aprite una nuova sessione del tipo corretto e controllate alias ll. Nella sessione già aperta eseguite anche unalias ll: togliere una riga dal file e ricaricarlo non cancella un alias già presente in memoria. Il comando seguente rilegge l’intero file e può avere altri effetti:

source ~/.bashrc

In alcuni sistemi le definizioni provengono anche da /etc/bash.bashrc o da file in /etc/profile.d/ caricati dalla configurazione di sistema. Verificate la catena di caricamento senza modificare alla cieca questi file. Quando opportuno, un unalias NOME nella vostra configurazione, dopo il caricamento della definizione, può limitarne l’uso alla vostra utenza; prima controllate che l’alias esista o usate la condizione mostrata più avanti.

Saltare un alias senza rimuoverlo

Per saltare un alias una sola volta, anteponete un backslash al nome. Per scegliere un eseguibile preciso, usate invece il suo percorso assoluto, verificato sul sistema. /usr/bin/ls è un percorso comune su Linux, ma non è garantito su ogni installazione.

\ls
/usr/bin/ls

\ls impedisce l’espansione dell’alias, ma può ancora richiamare una funzione chiamata ls. Il percorso assoluto seleziona il file indicato senza la normale ricerca nel PATH. Per saltare la ricerca delle funzioni senza fissare un percorso, considerate command ls, verificando che command non sia stato ridefinito.

Alias, funzioni e variabili hanno metodi di rimozione diversi

Tipo Comando di rimozione Come controllare
Alias unalias NOME alias NOME oppure type NOME
Funzione della shell unset -f NOME declare -F NOME oppure type NOME
Variabile della shell unset -v NOME declare -p NOME
Eseguibile esterno Si gestisce come file o pacchetto, non con unalias. type -a NOME; command -v NOME può indicare anche altri tipi.

unalias lascia intatti funzioni, variabili e file omonimi. In Bash unset -v NOME seleziona esplicitamente una variabile e unset -f NOME una funzione; senza opzioni, unset NOME può rimuovere una funzione se la variabile non esiste. Le entità di sola lettura possono impedire la rimozione. Individuate il tipo prima di intervenire.

Rimuovere soltanto un alias esistente

Per rimuovere ll solo se è definito come alias, controllate prima lo stato di alias ll. La redirezione nasconde i messaggi della verifica; se il nome non è un alias, il corpo della condizione non viene eseguito.

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

Bash non espande gli alias nelle shell non interattive per impostazione predefinita. Uno script separato ha il proprio ambiente e non può eliminare gli alias della shell chiamante. Inserite quindi questo controllo nel contesto che volete modificare, per esempio nella configurazione della shell; scrivete gli script condivisi senza dipendere da alias personali.

Problemi comuni

L’alias ricompare nel nuovo terminale

Un file di avvio sta caricando di nuovo la definizione. Controllate i file realmente letti dalla sessione, compresi quelli richiamati con source o ., quindi modificate la definizione responsabile. Ricaricare un file da cui avete tolto la riga non elimina da solo la vecchia definizione nella shell corrente.

Bash segnala che il nome non è un alias

Un messaggio come unalias: ll: not found indica che ll non è un alias definito in quella shell. Se invece la shell non trova il comando unalias stesso, verificate quale shell state usando. Controllate i nomi con type -a NOME; la formulazione esatta degli errori dipende dalla lingua e dalla shell.

Il comportamento è ancora diverso

Può rimanere una funzione omonima oppure possono esserci più eseguibili nel PATH. Esaminate type -a NOME. Se è cambiato il percorso di un programma, hash -r svuota la cache dei percorsi di Bash; non elimina alias, funzioni o file. Inoltre gli alias vengono espansi durante la lettura: scrivete unalias ll e il successivo controllo o richiamo su righe separate, fuori da un unico comando composto già letto.

Scegliere il metodo adatto

Situazione Metodo consigliato
Saltare un alias una volta \NOME salta l’alias; un percorso assoluto verificato sceglie il file.
Rimuovere nella sessione corrente unalias NOME.
Svuotare la tabella degli alias Conservate le definizioni e usate unalias -a nella sessione interessata.
Impedire che ricompaia Modificate la definizione nel file di avvio; nella sessione corrente rimuovetela anche con unalias.
Rimuovere una funzione unset -f NOME, dopo aver verificato che sia la funzione voluta.

Domande frequenti

Come recuperare dopo unalias -a?

Non esiste un annullamento automatico. Potete ricaricare un file di definizioni salvato e controllato, oppure aprire una nuova shell che legga i file di avvio. Le definizioni create soltanto al terminale e non conservate devono essere ricreate. Ricordate che source ~/.bashrc riesegue anche le altre istruzioni presenti in quel file.

unalias modifica anche gli altri terminali?

No. Ogni processo shell mantiene il proprio stato: unalias nella shell corrente non modifica gli alias delle altre shell già aperte. Se invece modificate un file di avvio condiviso, il cambiamento può influire sulle sessioni che lo leggeranno in seguito.

Cosa viene eseguito se si inserisce lo stesso nome dell'alias eliminato?

Bash cerca tra le funzioni rimaste, i builtin e gli eseguibili nel PATH. Se nessuno corrisponde, il comando non viene trovato. Controllate con type NOME nella stessa sessione, su una nuova riga dopo la rimozione.

Documentazione di riferimento