On 7/17/13 10:53 AM, Mark W. Johnson wrote:
> Linda,
> 
> Don't get hung up on:
> 
>       function _cd { command cd "$@"; }
>       alias cd=_cd
> 
> In my real _cd function it saves off the directories visited, but I didn't 
> want to complicate the issue, so I replaced my useful _cd function to 
> something useless but simpler to demonstrate the problem.
> 
> I did just update my version of bash, but unfortunately I'm not sure what 
> version I was previously running.
> 
> I have one piece of information that I don't understand.  If I unalias cd, I 
> still have the problem.  If however, I never set the alias there's no 
> problem.  If I set the alias but then unset -f _cd, I get:
> 
>       cd bash: completion: function `_cd' not found
> 
> So it's as if once the alias is set, tab completion always follows the alias 
> even after I unset it.
Alias expansion is performed when a function is defined.  Let's say you
have the above alias defined before you define your completions.  If you
define a shell function to produce the completions for `cd', and that shell
function uses `cd' to do its work, the cd -> _cd alias expansion will
have been performed before the shell function is called.

Enabling -x will allow you to see exactly what happens when you attempt
tab completion.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/

Reply via email to