Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
jeandestouches opened this issue Jul 6, 2024 · 6 comments · May be fixed by #1357
Open

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

jeandestouches opened this issue Jul 6, 2024 · 6 comments · May be fixed by #1357

Comments

@jeandestouches
Copy link

jeandestouches commented Jul 6, 2024

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

  • [Gentoo Hardened / 6.6.30]
  • [ 5.2.26(1)-release] bash version
  • [ 2.14.0] bash-completion version

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.

@JohnVillalovos
Copy link

This issue is also present on Fedora with bash-completion 2.13

@JohnVillalovos
Copy link

JohnVillalovos commented Apr 5, 2025

I bisected this and got the following:

[root@bee604c8cda3 bash-completion]# git bisect bad
9ba58318d7a00c618c0fad93fdea18a03421a91b is the first bad commit
commit 9ba58318d7a00c618c0fad93fdea18a03421a91b (HEAD)
Author: Ville Skyttä <ville.skytta@iki.fi>
Date:   Sun Dec 18 17:55:25 2022 +0200

    fix: variable quoting fixes

    As prompted by shellcheck SC2086.

(edited by @akinomyoga) Link to the commit: 9ba5831.

@JohnVillalovos
Copy link

JohnVillalovos commented Apr 5, 2025

Here is a set -x output with export PS4='+ ${BASH_SOURCE:-}:${FUNCNAME[0]:-}:L${LINENO:-}: ' when using commit 9ba5831:

[root@bee604c8cda3 bash-completion]# rsync . /home/test/dir\ wit+ /usr/local/share/bash-completion/completions/rsync:_rsync:L2:   local cur prev words cword split comp_args
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L3:   _comp_initialize -s -n : -- rsync '/home/test/dir\ wit' .
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L2:   local exclude= outx errx inx
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L4:   local flag OPTIND=1 OPTARG= OPTERR=0
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L5:   getopts n:e:o:i:s flag -s -n : -- rsync '/home/test/dir\ wit' .
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L1062:   case $flag in
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L12:   split=false
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L13:   exclude+==
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L5:   getopts n:e:o:i:s flag -s -n : -- rsync '/home/test/dir\ wit' .
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L1062:   case $flag in
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L7:   exclude+=:
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L5:   getopts n:e:o:i:s flag -s -n : -- rsync '/home/test/dir\ wit' .
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L21:   shift 4
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L22:   (( 3 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L22:   comp_args=("$@")
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L24:   COMPREPLY=()
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L25:   local 'redir=@(?(+([0-9])|{[a-zA-Z_]*([a-zA-Z_0-9])})@(>?([>|&])|<?([>&])|<<?([-<]))|&>?(>))'
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L26:   _get_comp_words_by_ref -n '=:<>&' cur prev words cword
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L2:   local exclude flag i OPTIND=1
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L3:   words=()
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L3:   local cur cword words
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L4:   upargs=()
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L4:   upvars=()
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L4:   local upargs upvars vcur vcword vprev vwords
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L5:   unset -v vcur vcword vprev vwords
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L7:   getopts c:i:n:p:w: flag -n '=:<>&' cur prev words cword
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L602:   case $flag in
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L11:   exclude='=:<>&'
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L7:   getopts c:i:n:p:w: flag -n '=:<>&' cur prev words cword
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L20:   [[ 6 -ge 3 ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L615:   case ${!OPTIND} in
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L22:   vcur=cur
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L32:   (( OPTIND += 1 ))
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L20:   [[ 6 -ge 4 ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L615:   case ${!OPTIND} in
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L23:   vprev=prev
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L32:   (( OPTIND += 1 ))
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L20:   [[ 6 -ge 5 ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L615:   case ${!OPTIND} in
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L25:   vwords=words
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L32:   (( OPTIND += 1 ))
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L20:   [[ 6 -ge 6 ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L615:   case ${!OPTIND} in
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L24:   vcword=cword
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L32:   (( OPTIND += 1 ))
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L20:   [[ 6 -ge 7 ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L35:   __get_cword_at_cursor_by_ref '=:<>&' words cword cur
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L2:   words=()
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L2:   local cword words
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L3:   __reassemble_comp_words_by_ref '=:<>&' words cword
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L2:   local exclude i j line ref
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L4:   [[ -n =:<>& ]]
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L7:   exclude='[=:<>&]'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L11:   printf -v cword %s 2
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L13:   [[ -v exclude ]]
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L15:   line='rsync . /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L17:   (( i = 0, j = 0 ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L476:   (( i < 3 ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L22:   [[ 0 -gt 0 ]]
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L46:   ref='words[0]'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L47:   printf -v 'words[0]' %s rsync
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L49:   line=' . /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L51:   (( i == COMP_CWORD ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L476:   (( i++, j++ ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L476:   (( i < 3 ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L22:   [[ 1 -gt 0 ]]
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L22:   [[ . == +([=:<>&]) ]]
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L46:   ref='words[1]'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L47:   printf -v 'words[1]' %s .
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L49:   line=' /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L51:   (( i == COMP_CWORD ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L476:   (( i++, j++ ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L476:   (( i < 3 ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L22:   [[ 2 -gt 0 ]]
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L22:   [[ /home/test/dir\ wit == +([=:<>&]) ]]
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L46:   ref='words[2]'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L47:   printf -v 'words[2]' %s '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L49:   line=
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L51:   (( i == COMP_CWORD ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L51:   printf -v cword %s 2
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L476:   (( i++, j++ ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L476:   (( i < 3 ))
+ /usr/local/share/bash-completion/bash_completion:__reassemble_comp_words_by_ref:L53:   (( i == COMP_CWORD ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L5:   local i cur= index=27 'lead=rsync . /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L7:   [[ 27 -gt 0 ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L7:   [[ -n rsync . /home/test/dir\ wit ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L7:   [[ -n rsync./home/test/dir\wit ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L8:   cur='rsync . /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L9:   (( i = 0 ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L538:   (( i <= cword ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ 27 -ge 5 ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ rsync != \r\s\y\n\c ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L20:   (( i < cword ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L22:   local old_size=27
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L23:   cur=' . /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L24:   local new_size=22
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L25:   (( index -= old_size - new_size ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L538:   (( ++i ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L538:   (( i <= cword ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ 22 -ge 1 ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[   != \. ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L14:   cur='. /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L16:   (( index > 0 ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L16:   (( index-- ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ 21 -ge 1 ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ . != \. ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L20:   (( i < cword ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L22:   local old_size=21
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L23:   cur=' /home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L24:   local new_size=20
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L25:   (( index -= old_size - new_size ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L538:   (( ++i ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L538:   (( i <= cword ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ 20 -ge 19 ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[  /home/test/dir\ wi != \/\h\o\m\e\/\t\e\s\t\/\d\i\r\\\ \w\i\t ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L14:   cur='/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L16:   (( index > 0 ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L16:   (( index-- ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ 19 -ge 19 ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L12:   [[ /home/test/dir\ wit != \/\h\o\m\e\/\t\e\s\t\/\d\i\r\\\ \w\i\t ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L20:   (( i < cword ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L538:   (( ++i ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L538:   (( i <= cword ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L29:   [[ -n /home/test/dir\ wit ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L29:   [[ ! -n /home/test/dir\wit ]]
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L31:   (( index < 0 ))
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L34:   local words cword cur
+ /usr/local/share/bash-completion/bash_completion:__get_cword_at_cursor_by_ref:L34:   _upvars -a3 words rsync . '/home/test/dir\ wit' -v cword 2 -v cur '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_upvars:L2:   (( 11 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 11 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L302:   case $1 in
+ /usr/local/share/bash-completion/bash_completion:_upvars:L11:   [[ -n 3 ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L16:   printf %d 3
+ /usr/local/share/bash-completion/bash_completion:_upvars:L23:   [[ -n words ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L23:   unset -v words
+ /usr/local/share/bash-completion/bash_completion:_upvars:L23:   eval 'words=("${@:3:3}")'
++ /usr/local/share/bash-completion/bash_completion:_upvars:L1:   words=("${@:3:3}")
+ /usr/local/share/bash-completion/bash_completion:_upvars:L24:   shift 5
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 6 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L302:   case $1 in
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   [[ -n cword ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   unset -v cword
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   eval 'cword="$3"'
++ /usr/local/share/bash-completion/bash_completion:_upvars:L1:   cword=2
+ /usr/local/share/bash-completion/bash_completion:_upvars:L35:   shift 3
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 3 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L302:   case $1 in
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   [[ -n cur ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   unset -v cur
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   eval 'cur="$3"'
++ /usr/local/share/bash-completion/bash_completion:_upvars:L1:   cur='/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_upvars:L35:   shift 3
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 0 ))
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L37:   [[ -v vcur ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L38:   upvars+=("$vcur")
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L39:   upargs+=(-v $vcur "$cur")
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L41:   [[ -v vcword ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L42:   upvars+=("$vcword")
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L43:   upargs+=(-v $vcword "$cword")
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L45:   [[ -v vprev ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L45:   [[ 2 -ge 1 ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L46:   upvars+=("$vprev")
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L47:   upargs+=(-v $vprev "${words[cword - 1]}")
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L49:   [[ -v vwords ]]
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L50:   upvars+=("$vwords")
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L51:   upargs+=(-a${#words[@]} $vwords ${words+"${words[@]}"})
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L54:   (( 4 ))
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L54:   local cur cword prev words
+ /usr/local/share/bash-completion/bash_completion:_get_comp_words_by_ref:L54:   _upvars -v cur '/home/test/dir\ wit' -v cword 2 -v prev . -a3 words rsync . '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_upvars:L2:   (( 14 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 14 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L302:   case $1 in
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   [[ -n cur ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   unset -v cur
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   eval 'cur="$3"'
++ /usr/local/share/bash-completion/bash_completion:_upvars:L1:   cur='/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_upvars:L35:   shift 3
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 11 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L302:   case $1 in
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   [[ -n cword ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   unset -v cword
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   eval 'cword="$3"'
++ /usr/local/share/bash-completion/bash_completion:_upvars:L1:   cword=2
+ /usr/local/share/bash-completion/bash_completion:_upvars:L35:   shift 3
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 8 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L302:   case $1 in
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   [[ -n prev ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   unset -v prev
+ /usr/local/share/bash-completion/bash_completion:_upvars:L34:   eval 'prev="$3"'
++ /usr/local/share/bash-completion/bash_completion:_upvars:L1:   prev=.
+ /usr/local/share/bash-completion/bash_completion:_upvars:L35:   shift 3
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 5 ))
+ /usr/local/share/bash-completion/bash_completion:_upvars:L302:   case $1 in
+ /usr/local/share/bash-completion/bash_completion:_upvars:L11:   [[ -n 3 ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L16:   printf %d 3
+ /usr/local/share/bash-completion/bash_completion:_upvars:L23:   [[ -n words ]]
+ /usr/local/share/bash-completion/bash_completion:_upvars:L23:   unset -v words
+ /usr/local/share/bash-completion/bash_completion:_upvars:L23:   eval 'words=("${@:3:3}")'
++ /usr/local/share/bash-completion/bash_completion:_upvars:L1:   words=("${@:3:3}")
+ /usr/local/share/bash-completion/bash_completion:_upvars:L24:   shift 5
+ /usr/local/share/bash-completion/bash_completion:_upvars:L7:   (( 0 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L29:   _variables
+ /usr/local/share/bash-completion/bash_completion:_variables:L2:   [[ /home/test/dir\ wit =~ ^(\$(\{[!#]?)?)([A-Za-z0-9_]*)$ ]]
+ /usr/local/share/bash-completion/bash_completion:_variables:L21:   [[ /home/test/dir\ wit =~ ^(\$\{[#!]?)([A-Za-z0-9_]*)\[([^]]*)$ ]]
+ /usr/local/share/bash-completion/bash_completion:_variables:L35:   [[ /home/test/dir\ wit =~ ^\$\{[#!]?[A-Za-z0-9_]*\[.*]$ ]]
+ /usr/local/share/bash-completion/bash_completion:_variables:L41:   return 1
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L34:   [[ /home/test/dir\ wit == @(?(+([0-9])|{[a-zA-Z_]*([a-zA-Z_0-9])})@(>?([>|&])|<?([>&])|<<?([-<]))|&>?(>))* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L34:   [[ . == @(?(+([0-9])|{[a-zA-Z_]*([a-zA-Z_0-9])})@(>?([>|&])|<?([>&])|<<?([-<]))|&>?(>)) ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L54:   local i skip
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L55:   (( i = 1 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L1111:   (( i < 3 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L56:   [[ . == @(?(+([0-9])|{[a-zA-Z_]*([a-zA-Z_0-9])})@(>?([>|&])|<?([>&])|<<?([-<]))|&>?(>))* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L63:   (( i++ ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L1111:   (( 1 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L1111:   (( i < 3 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L56:   [[ /home/test/dir\ wit == @(?(+([0-9])|{[a-zA-Z_]*([a-zA-Z_0-9])})@(>?([>|&])|<?([>&])|<<?([-<]))|&>?(>))* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L63:   (( i++ ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L1111:   (( 1 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L1111:   (( i < 3 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L67:   (( cword <= 0 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L68:   prev=.
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L70:   [[ -n false ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L70:   _split_longopt
+ /usr/local/share/bash-completion/bash_completion:_split_longopt:L2:   [[ /home/test/dir\ wit == --?*=* ]]
+ /usr/local/share/bash-completion/bash_completion:_split_longopt:L10:   return 1
+ /usr/local/share/bash-completion/bash_completion:_comp_initialize:L72:   return 0
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L5:   local 'noargopts=!(-*|*[Te]*)'
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L10:   case $prev in
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L33:   false
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L35:   _expand
+ /usr/local/share/bash-completion/bash_completion:_expand:L1459:   case ${cur-} in
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L40:   case $cur in
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L62:   _known_hosts_real -c -a -- '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2:   local configfile flag prefix=
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L3:   local cur suffix= aliases i host ipv4 ipv6
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L4:   tmpkh=()
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L4:   khd=()
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L4:   config=()
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L4:   local -a kh tmpkh khd config
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L8:   local OPTIND=1
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L9:   getopts ac46F:p: flag -c -a -- '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2020:   case $flag in
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L12:   suffix=:
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L9:   getopts ac46F:p: flag -c -a -- '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2020:   case $flag in
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L11:   aliases=yes
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L9:   getopts ac46F:p: flag -c -a -- '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L23:   (( 4 < OPTIND ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L27:   cur='/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L28:   (( OPTIND += 1 ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L29:   (( 4 >= OPTIND ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L38:   [[ /home/test/dir\ wit == *@* ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L39:   kh=()
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L42:   [[ -v configfile ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2055:   for i in /etc/ssh/ssh_config ~/.ssh/config ~/.ssh2/config
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L46:   [[ -r /etc/ssh/ssh_config ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L46:   [[ ! -d /etc/ssh/ssh_config ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L46:   config+=("$i")
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2055:   for i in /etc/ssh/ssh_config ~/.ssh/config ~/.ssh2/config
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L46:   [[ -r /root/.ssh/config ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2055:   for i in /etc/ssh/ssh_config ~/.ssh/config ~/.ssh2/config
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L46:   [[ -r /root/.ssh2/config ]]
++ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L1:   shopt -po noglob
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L50:   local 'IFS=
' 'reset=set +o noglob'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L51:   set -o noglob
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L54:   (( 1 > 0 ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2065:   for i in "${config[@]}"
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L56:   _included_ssh_config_files /etc/ssh/ssh_config
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L2:   (( 1 < 1 ))
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L4:   local configfile i files f
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L5:   configfile=/etc/ssh/ssh_config
++ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1:   shopt -po noglob
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L7:   local 'IFS=
' 'reset=set -o noglob'
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L8:   set -o noglob
++ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1:   command sed -ne 's/^[[:blank:]]*[Ii][Nn][Cc][Ll][Uu][Dd][Ee][[:blank:]]\(.*\)$/\1/p' /etc/ssh/ssh_config
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L9:   included=('/etc/ssh/ssh_config.d/*.conf')
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L9:   local included
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L10:   set -o noglob
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L12:   [[ -n /etc/ssh/ssh_config.d/*.conf ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1968:   for i in "${included[@]}"
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L18:   [[ /etc/ssh/ssh_config.d/*.conf =~ ^~.*|^/.* ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L25:   __expand_tilde_by_ref i
+ /usr/local/share/bash-completion/bash_completion:__expand_tilde_by_ref:L2:   [[ /etc/ssh/ssh_config.d/*.conf == \~* ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L27:   _comp_expand_glob files '$i'
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L2:   (( 2 != 2 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L6:   [[ files == @(GLOBIGNORE|_*|*[^_a-zA-Z0-9]*|[0-9]*|) ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L12:   local _original_opts=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L13:   set +o noglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L14:   shopt -s nullglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L15:   shopt -u failglob dotglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L18:   local GLOBIGNORE=
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L20:   eval -- 'files=()'
++ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L1:   files=()
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L21:   eval -- 'files=($i)'
++ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L1:   files=($i)
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L26:   _comp_unlocal GLOBIGNORE
+ /usr/local/share/bash-completion/bash_completion:_comp_unlocal:L2:   (( BASH_VERSINFO[0] >= 5 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_unlocal:L2:   shopt -q localvar_unset
+ /usr/local/share/bash-completion/bash_completion:_comp_unlocal:L7:   unset -v GLOBIGNORE
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L27:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:dotglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L30:   shopt -u dotglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L32:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:nullglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L32:   shopt -u nullglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L33:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:failglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L34:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:noglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L34:   set -o noglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L35:   return 0
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L28:   (( 1 ))
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1984:   for f in "${files[@]}"
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L30:   [[ -r /etc/ssh/ssh_config.d/50-redhat.conf ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L30:   [[ ! -d /etc/ssh/ssh_config.d/50-redhat.conf ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L31:   config+=("$f")
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L33:   _included_ssh_config_files /etc/ssh/ssh_config.d/50-redhat.conf
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L2:   (( 1 < 1 ))
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L4:   local configfile i files f
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L5:   configfile=/etc/ssh/ssh_config.d/50-redhat.conf
++ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1:   shopt -po noglob
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L7:   local 'IFS=
' 'reset=set -o noglob'
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L8:   set -o noglob
++ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1:   command sed -ne 's/^[[:blank:]]*[Ii][Nn][Cc][Ll][Uu][Dd][Ee][[:blank:]]\(.*\)$/\1/p' /etc/ssh/ssh_config.d/50-redhat.conf
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L9:   included=('/etc/crypto-policies/back-ends/openssh.config')
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L9:   local included
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L10:   set -o noglob
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L12:   [[ -n /etc/crypto-policies/back-ends/openssh.config ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1968:   for i in "${included[@]}"
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L18:   [[ /etc/crypto-policies/back-ends/openssh.config =~ ^~.*|^/.* ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L25:   __expand_tilde_by_ref i
+ /usr/local/share/bash-completion/bash_completion:__expand_tilde_by_ref:L2:   [[ /etc/crypto-policies/back-ends/openssh.config == \~* ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L27:   _comp_expand_glob files '$i'
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L2:   (( 2 != 2 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L6:   [[ files == @(GLOBIGNORE|_*|*[^_a-zA-Z0-9]*|[0-9]*|) ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L12:   local _original_opts=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L13:   set +o noglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L14:   shopt -s nullglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L15:   shopt -u failglob dotglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L18:   local GLOBIGNORE=
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L20:   eval -- 'files=()'
++ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L1:   files=()
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L21:   eval -- 'files=($i)'
++ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L1:   files=($i)
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L26:   _comp_unlocal GLOBIGNORE
+ /usr/local/share/bash-completion/bash_completion:_comp_unlocal:L2:   (( BASH_VERSINFO[0] >= 5 ))
+ /usr/local/share/bash-completion/bash_completion:_comp_unlocal:L2:   shopt -q localvar_unset
+ /usr/local/share/bash-completion/bash_completion:_comp_unlocal:L7:   unset -v GLOBIGNORE
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L27:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:dotglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L30:   shopt -u dotglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L32:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:nullglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L32:   shopt -u nullglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L33:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:failglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L34:   [[ :braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:xtrace:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath: == *:noglob:* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L34:   set -o noglob
+ /usr/local/share/bash-completion/bash_completion:_comp_expand_glob:L35:   return 0
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L28:   (( 1 ))
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1984:   for f in "${files[@]}"
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L30:   [[ -r /etc/crypto-policies/back-ends/openssh.config ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L30:   [[ ! -d /etc/crypto-policies/back-ends/openssh.config ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L31:   config+=("$f")
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L33:   _included_ssh_config_files /etc/crypto-policies/back-ends/openssh.config
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L2:   (( 1 < 1 ))
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L4:   local configfile i files f
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L5:   configfile=/etc/crypto-policies/back-ends/openssh.config
++ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1:   shopt -po noglob
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L7:   local 'IFS=
' 'reset=set -o noglob'
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L8:   set -o noglob
++ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L1:   command sed -ne 's/^[[:blank:]]*[Ii][Nn][Cc][Ll][Uu][Dd][Ee][[:blank:]]\(.*\)$/\1/p' /etc/crypto-policies/back-ends/openssh.config
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L9:   included=()
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L9:   local included
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L10:   set -o noglob
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L12:   [[ -n '' ]]
+ /usr/local/share/bash-completion/bash_completion:_included_ssh_config_files:L12:   return
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L61:   (( 3 > 0 ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L62:   IFS='
'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L67:   tmpkh=($(awk 'sub("^[ \t]*([Gg][Ll][Oo][Bb][Aa][Ll]|[Uu][Ss][Ee][Rr])[Kk][Nn][Oo][Ww][Nn][Hh][Oo][Ss][Tt][Ss][Ff][Ii][Ll][Ee][ \t=]+", "") { print $0 }' "${config[@]}" | sort -u))
++ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L1:   sort -u
++ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L1:   awk 'sub("^[ \t]*([Gg][Ll][Oo][Bb][Aa][Ll]|[Uu][Ss][Ee][Rr])[Kk][Nn][Oo][Ww][Nn][Hh][Oo][Ss][Tt][Ss][Ff][Ii][Ll][Ee][ \t=]+", "") { print $0 }' /etc/ssh/ssh_config /etc/ssh/ssh_config.d/50-redhat.conf /etc/crypto-policies/back-ends/openssh.config
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L68:   IFS='
'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L70:   (( 0 != 0 ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L88:   [[ ! -v configfile ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2100:   for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L93:   [[ -r /etc/ssh/ssh_known_hosts ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2100:   for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L93:   [[ -r /etc/ssh/ssh_known_hosts2 ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2100:   for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L93:   [[ -r /etc/known_hosts ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2100:   for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L93:   [[ -r /etc/known_hosts2 ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2100:   for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L93:   [[ -r /root/.ssh/known_hosts ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2100:   for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L93:   [[ -r /root/.ssh/known_hosts2 ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2105:   for i in /etc/ssh2/knownhosts ~/.ssh2/hostkeys
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L96:   [[ -d /etc/ssh2/knownhosts ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L2105:   for i in /etc/ssh2/knownhosts ~/.ssh2/hostkeys
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L96:   [[ -d /root/.ssh2/hostkeys ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L101:   (( 0 + 0 > 0 ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L153:   [[ 3 -gt 0 ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L153:   [[ -v aliases ]]
++ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L1:   command sed -ne 's/^[[:blank:]]*[Hh][Oo][Ss][Tt][[:blank:]=]\{1,\}\(.*\)$/\1/p' /etc/ssh/ssh_config /etc/ssh/ssh_config.d/50-redhat.conf /etc/crypto-policies/back-ends/openssh.config
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L154:   hosts=()
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L154:   local -a hosts
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L155:   (( 0 != 0 ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L162:   [[ -n '' ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L173:   type ruptime
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L181:   [[ -n 1 ]]
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L183:   COMPREPLY+=($(compgen -A hostname -P "$prefix" -S "$suffix" -- "$cur"))
++ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L1:   compgen -A hostname -P '' -S : -- '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L186:   set +o noglob
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L188:   (( 0 ))
+ /usr/local/share/bash-completion/bash_completion:_known_hosts_real:L202:   __ltrim_colon_completions '/home/test/dir\ wit'
+ /usr/local/share/bash-completion/bash_completion:__ltrim_colon_completions:L2:   local i=0
+ /usr/local/share/bash-completion/bash_completion:__ltrim_colon_completions:L3:   (( i == 0 ))
+ /usr/local/share/bash-completion/bash_completion:__ltrim_colon_completions:L3:   return 0
+ /usr/local/share/bash-completion/completions/rsync:_rsync:L63:   _comp_xfunc ssh scp_local_files
+ /usr/local/share/bash-completion/bash_completion:_comp_xfunc:L2:   local xfunc_name=scp_local_files
+ /usr/local/share/bash-completion/bash_completion:_comp_xfunc:L3:   [[ scp_local_files == _* ]]
+ /usr/local/share/bash-completion/bash_completion:_comp_xfunc:L4:   xfunc_name=_comp_xfunc_ssh_scp_local_files
+ /usr/local/share/bash-completion/bash_completion:_comp_xfunc:L5:   declare -F _comp_xfunc_ssh_scp_local_files
+ /usr/local/share/bash-completion/bash_completion:_comp_xfunc:L6:   _comp_xfunc_ssh_scp_local_files
+ /usr/local/share/bash-completion/completions/ssh:_comp_xfunc_ssh_scp_local_files:L2:   local 'IFS=
'
+ /usr/local/share/bash-completion/completions/ssh:_comp_xfunc_ssh_scp_local_files:L4:   local dirsonly=false
+ /usr/local/share/bash-completion/completions/ssh:_comp_xfunc_ssh_scp_local_files:L5:   [[ '' == -d ]]
+ /usr/local/share/bash-completion/completions/ssh:_comp_xfunc_ssh_scp_local_files:L10:   false
+ /usr/local/share/bash-completion/completions/ssh:_comp_xfunc_ssh_scp_local_files:L17:   COMPREPLY+=($(command ls -aF1dL "$cur"* 2> /dev/null | command sed -e "s/$_comp_cmd_scp__path_esc/\\\\&/g" -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' -e "s/^/${1-}/"))
++ /usr/local/share/bash-completion/completions/ssh:_comp_xfunc_ssh_scp_local_files:L1:   command sed -e 's/[][(){}<>"'\'',:;^&!$=?`\\|[:space:]]/\\&/g' -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' -e 's/^//'
++ /usr/local/share/bash-completion/completions/ssh:_comp_xfunc_ssh_scp_local_files:L1:   command ls -aF1dL '/home/test/dir\ wit*'
^C
++ ::L12:   printf '\033]0;%s@%s:%s\007' '' bee604c8cda3 '~/bash-completion'
[root@bee604c8cda3 bash-completion]# set +x

@JohnVillalovos
Copy link

JohnVillalovos commented Apr 5, 2025

This fixed it for me when modifying commit 9ba5831 :

[root@bee604c8cda3 bash-completion]# git diff
diff --git a/completions/ssh b/completions/ssh
index 4cbe87d2..f4e0ef41 100644
--- a/completions/ssh
+++ b/completions/ssh
@@ -488,11 +488,11 @@ _comp_xfunc_ssh_scp_local_files()
     fi

     if $dirsonly; then
-        COMPREPLY+=($(command ls -aF1dL "$cur"* 2>/dev/null |
+        COMPREPLY+=($(command ls -aF1dL $cur* 2>/dev/null |
             command sed -e "s/$_comp_cmd_scp__path_esc/\\\\&/g" -e '/[^\/]$/d' \
                 -e "s/^/${1-}/"))
     else
-        COMPREPLY+=($(command ls -aF1dL "$cur"* 2>/dev/null |
+        COMPREPLY+=($(command ls -aF1dL $cur* 2>/dev/null |
             command sed -e "s/$_comp_cmd_scp__path_esc/\\\\&/g" -e 's/[*@|=]$//g' \
                 -e 's/[^\/]$/& /g' -e "s/^/${1-}/"))
     fi

@akinomyoga
Copy link
Collaborator

Thanks for the report.

The provided "fix" might appear to work, but it's accidental. The pair of the backslash and space appearing in cur is supposed to be processed by quote removal. However, the backslash and space in the unquoted $cur are processed by pathname expansion. Both produce the same result accidentally. The provided "fix" doesn't work for other types of quoting, such as 'dir wit' and "dir wit".

The correct fix is to unquote cur using _comp_dequote before passing it to the ls command.

@JohnVillalovos
Copy link

@akinomyoga Thanks for the input. I'll be honest I'm not quite sure how to fix this in the current code. As things have changed a lot. Not sure if I have given you some ideas on how to fix it.

I'll keep looking at it for a bit and see if I can figure things out.

akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 5, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 5, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 5, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 5, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 5, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 5, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 5, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 6, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 6, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.

Co-authored-by: Yedaya Katsman <yedaya.ka@gmail.com>
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 6, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.

Co-authored-by: Yedaya Katsman <yedaya.ka@gmail.com>
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 6, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.

Co-authored-by: Yedaya Katsman <yedaya.ka@gmail.com>
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 7, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.

Co-authored-by: Yedaya Katsman <yedaya.ka@gmail.com>
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 7, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.

Co-authored-by: Yedaya Katsman <yedaya.ka@gmail.com>
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 7, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.

Co-authored-by: Yedaya Katsman <yedaya.ka@gmail.com>
akinomyoga added a commit to akinomyoga/bash-completion that referenced this issue Apr 9, 2025
Filenames containing a special character are not properly completed
[1].  These completions generate filenames by pathname expanaion using
$cur.  However, $cur contains the word on the command line including
quotaing, such as cur='file\ with\ space.txt' and cur='"a b c.txt"'.
This patch obtains the value of "cur" using _comp_dequote.

[1] scop#1232

This patch also fixes a similar case in completions/java.

Co-authored-by: Yedaya Katsman <yedaya.ka@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants