| Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
|---|---|---|
| Indietro | Avanti | |
Un alias Bash, essenzialmente, non è niente più che una scorciatoia di tastiera, un'abbreviazione, un mezzo per evitare di digitare una lunga sequenza di comandi. Se, per esempio, si inserisce la riga alias lm="ls -l | more" nel file ~/.bashrc, ogni volta che verrà digitato lm da riga di comando, questo sarà automaticamente sostituito con ls -l | more. In questo modo si possono evitare lunghe digitazioni da riga di comando nonché dover ricordare combinazioni complesse di comandi ed opzioni. Impostare alias rm="rm -i" (modalità di cancellazione interattiva) può evitare moltissimi danni, perché impedisce di perdere inavvertitamente file importanti.
In uno script, gli alias hanno un'utilità molto limitata. Sarebbe alquanto bello se gli alias potessero assumere alcune delle funzionalità del preprocessore del C, come l'espansione di macro, ma sfortunatamente Bash non espande gli argomenti presenti nel corpo dell'alias. [1] Inoltre, uno script non è in grado di espandere l'alias stesso nei "costrutti composti", come gli enunciati if/then, i cicli e le funzioni. Un'ulteriore limitazione è rappresentata dal fatto che un alias non si espande ricorsivamente. Quasi invariabilmente, tutto quello che ci piacerebbe fosse fatto da un alias, può essere fatto molto più efficacemente con una funzione.
Esempio 24-1. Alias in uno script
#!/bin/bash
# alias.sh
shopt -s expand_aliases
# È necessario impostare questa opzione, altrimenti lo script non espande
#+ gli alias.
# Innazitutto, divertiamoci un po'.
alias Jesse_James='echo "\"Alias Jesse James\" era una commedia del 1959\
interpretata da Bob Hope."'
Jesse_James
echo; echo; echo;
alias ll="ls -l"
# Per definire un alias si possono usare sia gli apici singoli (') che quelli
#+ doppi (").
echo "Prova dell'alias \"ll\":"
ll /usr/X11R6/bin/mk* #* L'alias funziona.
echo
directory=/usr/X11R6/bin/
prefisso=mk* # Vediamo se il carattere jolly causa dei problemi.
echo "Variabili \"directory\" + \"prefisso\" = $directory$prefisso"
echo
alias lll="ls -l $directory$prefisso"
echo "Prova dell'alias \"lll\":"
lll # Lungo elenco di tutti i file presenti in /usr/X11R6/bin che
#+ iniziano con mk.
# Un alias è in grado di gestire le variabili concatenate
#+ - e anche il carattere jolly.
TRUE=1
echo
if [ TRUE ]
then
alias rr="ls -l"
echo "Prova dell'alias \"rr\" all'interno di un enunciato if/then:"
rr /usr/X11R6/bin/mk* #* Messaggio d'errore!
# Gli alias non vengono espansi all'interno di enunciati composti.
echo "Comunque, l'alias precedentemente espanso viene ancora riconosciuto:"
ll /usr/X11R6/bin/mk*
fi
echo
conto=0
while [ $conto -lt 3 ]
do
alias rrr="ls -l"
echo "Prova dell'alias \"rrr\" in un ciclo \"while\":"
rrr /usr/X11R6/bin/mk* #* Anche in questo caso l'alias non viene espanso.
# alias.sh: line 61: rrr: command not found
let conto+=1
done
echo; echo
alias xyz='cat $0' # Lo script visualizza sé stesso.
# Notate il quoting forte.
xyz
# Questo sembra funzionare,
#+ sebbene la documentazione Bash suggerisca il contrario.
#
# In ogni caso, come ha evidenziato Steve Jacobson,
#+ il parametro "$0" viene espanso immediatamente alla
#+ dichiarazione dell'alias.
exit 0 |
Il comando unalias elimina un alias precedentemente impostato.
Esempio 24-2. unalias: abilitare e disabilitare un alias
#!/bin/bash # unalias.sh shopt -s expand_aliases # Abilita l'espansione degli alias. alias llm='ls -al | more' llm echo unalias llm # Disabilita l'alias. llm # Dà un messaggio d'errore poiché 'llm' non viene più riconosciuto. exit 0 |
bash$ ./unalias.sh total 6 drwxrwxr-x 2 bozo bozo 3072 Feb 6 14:04 . drwxr-xr-x 40 bozo bozo 2048 Feb 6 14:04 .. -rwxr-xr-x 1 bozo bozo 199 Feb 6 14:04 unalias.sh ./unalias.sh: llm: command not found |
| [1] | Tuttavia, sembra che gli alias possano effettivamente espandere i parametri posizionali. |