don't recurse on alias expansion [was Re: SPUG:Re: ~damian/bin scripts. [moreso Offtopic]]

Michael R. Wolf MichaelRunningWolf at att.net
Wed Jan 22 17:08:03 CST 2003


Jeremy Mates <jmates at sial.org> writes:

> * Daniel James <djames at serv.net>
> > You have to get used to typing cwd though; if you name your function
> > "cd" then you will get an infinite loop--someone here may know how to
> > get around your alias problem though.
> 
> cd(){
>   builtin cd $*
>   ls
> }

Korn shell does it by quoting the name.  Any quoting mechanism
(single, double, backslash) on the name prevents alias substitution.
That's the idea.  Since I don't have a ksh handy, I haven't tested
this.

    alias cd='\cd "$@" && ls'

I also like putting in the && short-circuit test.  What if the cd
doesn't succeed?

Another way to make it work (for non-built-ins) would be to use an
absolute path name, though this isn't as portable across different
machines.  Aliases aren't expanded for names that look like absolute
paths. 

    alias ls='/bin/ls $LS_FLAGS "$@"'

-- 
Michael R. Wolf
    All mammals learn by playing!
        MichaelRunningWolf at att.net




More information about the spug-list mailing list