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.