Come usare gli alias in Linux shell commands
Questo articolo è ristampato dal libro Una guida pratica per Linux Commands, Editor, e Shell Programming 3rd edition, con il permesso dell’autore e dell’editore Prentice Hall, tutti i diritti riservati.
Un alias è un nome (di solito breve) che la shell traduce in un altro nome o comando (di solito più lungo). Gli alias consentono di definire nuovi comandi sostituendo una stringa per il primo token di un semplice comando. Essi sono in genere collocati nel~/.bashrc (bash) o ~/.,tcshrc (tcsh) file di avvio in modo che siano disponibili per subshell interattive.
In bash la sintassi dell’alias builtin è
alias ]
Sotto il tcsh la sintassi è
alias ]
la sintassi bash gli spazi non sono consentiti il segno di uguale. Se il valore contiene spazi o tabulazioni, è necessario racchiudere il valore tra virgolette. A differenza degli alias sotto tcsh, un alias bash non accetta un argomento dalla riga di comando in valore., Utilizzare una funzione bash quando è necessario utilizzare un argomento.
Un alias non sostituire stesso, che evita la possibilità di una ricorsione infinita, nella gestione di un alias come il seguente:
alias ls='ls -F'
È possibile nidificare alias. Gli alias sono disabilitati per le shell non interattive (ovvero gli script di shell). Utilizzare ilunalias
incorporato per rimuovere un alias., Quando si assegna un comando incorporato alias
senza argomenti, la shell visualizza un elenco di tutti gli alias definiti:
$ alias alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' alias zap='rm -i'
Per visualizzare l’alias di un particolare nome, immettere l’alias del comando seguito dal nome dell’alias. La maggior parte delle distribuzioni Linux definiscono almeno alcuni alias. Immettere un comando alias per vedere quali alias sono in vigore. È possibile eliminare gli alias che non si desidera dal file di avvio appropriato.,
Virgolette singole o doppie negli alias
La scelta delle virgolette singole o doppie è significativa nella sintassi dell’alias quando l’alias include variabili. Se racchiudi il valore tra virgolette doppie, tutte le variabili che appaiono nel valore vengono espanse quando viene creato l’alias. Se si racchiudono valori tra virgolette singole, le variabili non vengono espanse fino a quando non viene utilizzato l’alias. L’esempio seguente illustra la differenza.
La variabile della parola chiave PWD contiene il percorso della directory di lavoro., Max crea due alias mentre sta lavorando nella sua home directory. Poiché usa virgolette doppie quando crea l’alias dirA, la shell sostituisce il valore della directory di lavoro quando crea questo alias. Il comando alias dirA visualizza l’alias dirA e mostra che la sostituzione è già avvenuta:
$ echo $PWD /home/max $ alias dirA="echo Working directory is $PWD" $ alias dirA alias dirA='echo Working directory is /home/max'
Quando Max crea l’alias dirB, usa virgolette singole, che impediscono alla shell di espandere la variabile PW PWD., Il comando alias dirB mostra che l’alias dirB contiene ancora la variabile PW PWD non espansa:
$ alias dirB='echo Working directory is $PWD' $ alias dirB alias dirB='echo Working directory is $PWD'
Dopo aver creato gli alias dirA e dirB, Max usacd
per rendere cars la sua directory di lavoro e fornisce ciascuno degli alias come comando. L’alias che ha creato usando le virgolette doppie visualizza il nome della directory in cui ha creato l’alias come directory di lavoro (che è errata)., Al contrario, l’alias dirB visualizza il nome proprio della directory di lavoro:
$ cd cars $ dirA Working directory is /home/max $ dirB Working directory is /home/max/cars
SUGGERIMENTO: Come evitare che la shell invochi un alias
La shell controlla solo comandi semplici e non quotati per vedere se sono alias. I comandi dati come nomi di percorso relativi o assoluti e comandi quotati non sono controllati. Quando si desidera dare un comando che ha un alias ma non si desidera utilizzare l’alias, precedere il comando con una barra rovesciata, specificare il percorso assoluto del comando o dare il comando come./command
.,
Esempi di alias
I seguenti alias consente di digitare r
ripetere il comando precedente o r abc
ripetere l’ultima riga di comando che inizia con abc:
$ alias r='fc -s'
Se si utilizza il comando ls -ltr
spesso, è possibile creare un alias che sostituisce ls -ltr
quando si dà il comando l
:
un Altro uso comune di alias è quello di proteggersi dagli errori., L’esempio riportato di seguito sostituisce la versione interattiva del rm
utilità quando si immette il comando zap
:
$ alias zap='rm -i' $ zap f* rm: remove 'fixtax.icn'? n rm: remove 'flute.ps'? n rm: remove 'floor'? n
L’opzione-i cause rm
per chiedere di verificare ogni file che verranno eliminati, contribuendo in tal modo si evita di eliminare il file sbagliato. Puoi anche alias rm
con il comando rm -i
: alias rm='rm ‒i'
.,
L’alias nel prossimo esempio causare la shell per sostituire ls -l
ogni volta che si dare un’ ll
comando e ls ‒F
ogni volta che si utilizza ls
.L’opzione-F
fa sì chels
stampi una barra (/) alla fine dei nomi delle directory e un asterisco (*) alla fine dei nomi dei file eseguibili.,
In questo esempio, la stringa che sostituisce l’alias ll
(ls ‒l
) contiene un alias (ls
). Quando sostituisce un alias con il suo valore, la shell guarda la prima parola della stringa di sostituzione per vedere se si tratta di un alias. Nell’esempio precedente, la stringa di sostituzione contiene l’alias ls
, quindi si verifica una seconda sostituzione per produrre il comando finale ls ‒F ‒l
., (Per evitare un tuffo ricorsivo, il ls
nel testo di sostituzione, sebbene un alias, non viene espanso una seconda volta.)
Quando viene assegnato un elenco di alias senza il campo=value
ovalue
, il alias
visualizza il valore di ogni alias definito., alias
builtin segnala un errore se un alias non è stato definito:
$ alias ll l ls zap wx alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' alias zap='rm -i' bash: alias: wx: not found
È possibile evitare la sostituzione di alias facendo precedere il comando alias con una barra rovesciata (\
):
$ \ls Test_Emacs XTerm.ad flute.ps maptax.icn Tiger fixtax.icn floor testdir
Perché la sostituzione di un nome di alias con l’alias di valore non cambia il resto della riga di comando, le argomentazioni sono ancora ricevuti dal comando che viene eseguito:
$ ll f* -rw-r--r--. 1 max pubs 641 04-01 08:12 fixtax.icn -rw-r--r--. 1 max pubs 30015 03-01 14:24 flute.ps -rwxr-xr-x. 1 max pubs 485 09-21 08:03 floor*
È possibile rimuovere un alias con il unalias
builtin., Quando l’alias zap viene rimosso, non viene più visualizzato dal builtin alias
e il suo utilizzo successivo genera un messaggio di errore:
$ unalias zap $ alias alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' $ zap maptax.icn bash: zap: command not found