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. |