scop / bash-completion

Programmable completion functions for bash
GNU General Public License v2.0
2.95k stars 380 forks source link

[2.14.0] rsync path completion fails if a folder name have a space #1232

Open jeandestouches opened 4 months ago

jeandestouches commented 4 months ago

Describe the bug

bash-completion was recently updated from 2.11.0 to 2.14.0 in Gentoo. With bash-completion-2.14.0, rsync path completion fails if a folder name have a space.

To reproduce

~ mkdir "a b" "a c"
~ rsync -av a [hit tab]
It adds a backslash to the command "rsync -av a\ " but hitting tab again fails to show :
a\ b/ a\ c/

with set -x when I hit tab again (after the backslash is set) :

++ compgen -A hostname -P '' -S : -- 'a\ '
+ _result=
+ _comp_compgen__error_fallback
+ local _status=1
+ [[ -n set ]]
+ eval -- 'known_hosts+=()'
++ known_hosts+=()
+ return 1
+ return
+ (( 0 ))
+ return 1
+ return 1
+ _comp_compgen -ax scp local_files
+ local _append=
+ local _var=
+ local '_cur=a\ '
+ local _dir=
+ local '_ifs=  
' _has_ifs=
+ local _icmd= _xcmd=
+ _upvars=()
+ local -a _upvars
+ local _old_nocasematch=
+ shopt -q nocasematch
+ local OPTIND=1 OPTARG= OPTERR=0 _opt
+ getopts :av:U:Rc:C:lF:i:x: _opt -ax scp local_files
+ case $_opt in
+ _append=set
+ getopts :av:U:Rc:C:lF:i:x: _opt -ax scp local_files
+ case $_opt in
+ [[ ! -n scp ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ _xcmd=scp
+ getopts :av:U:Rc:C:lF:i:x: _opt -ax scp local_files
+ [[ -n '' ]]
+ shift 2
+ (( 1 == 0 ))
+ [[ ! -n '' ]]
+ _var=COMPREPLY
+ [[ -n set ]]
+ [[ local_files != -* ]]
+ [[ -n '' ]]
+ local -a _generator
+ [[ -n '' ]]
+ [[ -n scp ]]
+ _generator=(_comp_xfunc "$_xcmd" "compgen_$1")
+ declare -F -- _comp_xfunc
+ (( 0 ))
+ [[ -n '' ]]
+ local _comp_compgen__append=set
+ local _comp_compgen__var=COMPREPLY
+ local '_comp_compgen__cur=a\ ' 'cur=a\ '
+ _comp_xfunc scp compgen_local_files
+ local xfunc_name=compgen_local_files
+ [[ compgen_local_files == _* ]]
+ xfunc_name=_comp_xfunc_scp_compgen_local_files
+ declare -F -- _comp_xfunc_scp_compgen_local_files
+ _comp_xfunc_scp_compgen_local_files
+ local _dirsonly=
+ [[ '' == -d ]]
+ local files
+ _comp_expand_glob files '"$cur"*'
+ (( 2 != 2 ))
+ [[ files == @(GLOBIGNORE|_*|*[^_a-zA-Z0-9]*|[0-9]*|) ]]
+ local _original_opts=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:no_empty_cmd_completion:patsub_replacement:progcomp:promptvars:sourcepath
+ set +o noglob
+ shopt -s nullglob
+ shopt -u failglob dotglob
+ local GLOBIGNORE=
+ eval -- 'files=()'
++ files=()
+ eval -- 'files=("$cur"*)'
++ files=("$cur"*)
+ _comp_unlocal GLOBIGNORE
+ (( BASH_VERSINFO[0] >= 5 ))
+ shopt -q localvar_unset
+ unset -v GLOBIGNORE
+ [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:no_empty_cmd_completion:patsub_replacement:progcomp:promptvars:sourcepath: == *:dotglob:* ]]
+ shopt -u dotglob
+ [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:no_empty_cmd_completion:patsub_replacement:progcomp:promptvars:sourcepath: == *:nullglob:* ]]
+ shopt -u nullglob
+ [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:no_empty_cmd_completion:patsub_replacement:progcomp:promptvars:sourcepath: == *:failglob:* ]]
+ [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:no_empty_cmd_completion:patsub_replacement:progcomp:promptvars:sourcepath: == *:noglob:* ]]
+ eval '((${#files[@]}))'
++ (( 0 ))
+ return 0
+ local _status=0
+ [[ -n '' ]]
+ return 0

Versions


It isn't exclusive to Gentoo as I observe the exact same issue with Debian testing (Trixie) which features bash-completion-2.14. On the other hand, with Debian stable (bookworm) and bash-completion-2.11, hitting tab correctly show the folders (with space or not) Finally, downgrading bash-completion from 2.14.0 to 2.11.0 on my gentoo system solves the issue too.