2011-10-10 4 views
7

Mi sono guardato intorno in cerca di modi per cancellare l'alias in un unico comando. comando attualmente ho definito x:Comandi di catena alias di Linux (la ricorsione può essere evitata?)

alias x="clear;ls" 

Ora c'è qualche walkaround per evitare la ricorsione e definire:

alias ls='clear;ls' 
+0

Non riesco a fargli fare qualcosa di ricorsivo sul mio sistema, ma hai provato 'alias ls = 'chiaro;/bin/ls''? –

+2

My 'ls' è stato a lungo un alias che si riferisce a 'ls' e, come Manny D, non ha mai avuto problemi di ricorsione. Ho provato il tuo alias ls = 'clear; ls'' e ha funzionato bene anche. Questo è su RHEL 5 Linux, con Bash versione 3.2.25 - che tipo di sistema e quale shell stai usando? –

+0

oh stavo usando tcsh, se definisco: alias ls ''clear; ls'' e uso ls genererà un errore' 'Alias ​​Loop." '. Ma ha funzionato sotto Bash. – GoTTimw

risposta

20

Se si inserisce una barra rovesciata prima del nome del comando, questo disabiliterà tutti gli alias.

alias ls='clear;\ls' 

Oppure, come ha detto Arnaud, basta usare il percorso completo per ls.

+0

Penso che questa sia la soluzione più pulita e funzioni perfettamente. Grazie – GoTTimw

1

Basta fare:

alias ls='clear;/usr/bin/ls' 

Quando si digita:

$ ls 

Prima di tutto cercherà una funzione definita dall'utente, la avvierà, altrimenti eseguirà la ricerca nei comandi $ PATH.

Fornendo il percorso esplicito del comando ls, la ricorsione verrà evitata.

+3

È divertente perché ls non è mai in/usr/bin. – Hello71

13

Un altro modo per farlo sarebbe

alias ls='clear; command ls' 

Questo è diverso da /usr/bin/ls, quando cerca ancora ls nel $PATH, ma ignorerà funzioni di shell o alias.

+0

Questo è applicabile a molte situazioni, non solo agli alias. Se vuoi andare direttamente ai built-in e agli eseguibili, ignorando funzioni e alias, usa il comando 'command' integrato. – Zenexer

Problemi correlati