Hi, thanks for your report.  I'll have a closer look at your debugging
effort, but I'd like to reply fast and add that completion with variables
has known problems, indeed.  There's a bug report upstream with more
information, here:

https://github.com/scop/bash-completion/issues/290

Cheers,
Gabriel

On Thu, 19 Dec 2019, Antoine Beaupre wrote:

>On Sat, Dec 31, 2011 at 02:14:14PM +0100, xiscu wrote:
>> Package: bash-completion
>> Version: 1:1.3-1
>> Severity: normal
>> 
>> Dear Maintainer,
>> 
>> * What led up to the situation?
>> - Pressing <tab> to auto complete a path that uses $HOME
>> 
>> 
>> * What exactly did you do (or not do) that was effective (or
>>    ineffective)?
>> -  Just try: dir $HOME/ and then press <tab>
>> 
>> 
>> * What was the outcome of this action?
>> - The command is changed to: dir \$HOME/
>> (- If you then press <return> you will get the error:
>> dir: cannot access $HOME/: No such file or directory)
>> 
>> * What outcome did you expect instead?
>> - The command should be changed with the true $HOME value  
>
>I can reproduce the problem.
>
>$ bash --noprofile --norc
>bash-5.0$ echo $HOME/.bashrc 
>/home/anarcat/.bashrc
>bash-5.0$ . /usr/share/bash-completion/bash_completion
>bash-5.0$ echo \$HOME/.bashrc
>$HOME/.bashrc
>bash-5.0$ 
>
>I hit <TAB> after typing "$HOME/.bashr" in both cases, but after
>bash_completion is loaded it breaks $HOME.
>
>I've traced the problem down to this dynamic loader:
>
># set up dynamic completion loading
>_completion_loader()
>{
>    # $1=_EmptycmD_ already for empty cmds in bash 4.3, set to it for earlier
>    local cmd="${1:-_EmptycmD_}"
>
>    __load_completion "$cmd" && return 124
>
>    # Need to define *something*, otherwise there will be no completion at all.
>    complete -F _minimal -- "$cmd" && return 124
>} &&
>complete -D -F _completion_loader
>
>If that code is removed, the problem doesn't occur. That's a complex
>piece of code I have kind of gotten lost along the way. It seems the
>escape character is inserted when this is called:
>
>    _quote_readline_by_ref '$HOME/.bashr' quoted
>
>That's called somewhere below the _minimal callback defined above, which
>is:
>
>_minimal()
>{
>    local cur prev words cword split
>    _init_completion -s || return
>    $split && return
>    _filedir
>}
>
>Things look fine there, so I'm tempted to think it's
>_quote_readline_by_ref that's being too enthusiastic.
>
>But I'm pretty lost here so i'll stop there.

Reply via email to