scop / bash-completion

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

_parse_usage: line 16: syntax error near unexpected token `(' #838

Closed satmandu closed 1 year ago

satmandu commented 1 year ago

Describe the bug

Getting this error using bash 5.1.16(1)-release (The version which comes with current ChromeOS.)

bash bash_completion 
bash: _parse_usage: line 16: syntax error near unexpected token `('
bash: _parse_usage: line 16: ` -?(\[)+([a-zA-Z0-9?]))'
bash: error importing function definition for `_parse_usage'
bash: _xinetd_services: line 5: syntax error near unexpected token `('
bash: _xinetd_services: line 5: ` local -a svcs=($(printf '%s\n' $xinetddir/!($_backup_glob)));'

Using the version of bash-completion from top of tree gives me the same error, as does updating to bash 5.2.0(1)-release.

I'm seeing a prior report of these issues from many years ago here: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778282

I see no issues doing a sudo -i first, and then running bash bash-completion.

Versions (please complete the following information)

scop commented 1 year ago

Please follow the instructions that were in the bug report template, related to a getting a debug trace in the situation where you see the error.

See Troubleshooting section in README.md how to generate a debug trace, copy-paste it into a separate file and attach the file here.

Additionally, it might not make a difference, but for completeness bash bash_completion is not something one should do. I understand in this case it's probably for demonstrating the issue, but better stick with source /path/to/bash_completion or . /path/to/bash_completion.

satmandu commented 1 year ago

Debugged:

chronos@localhost /usr/local/lib/crew/packages (master %|SPARSE>)$ bash -x /usr/local/share/bash-completion/bash_completion 
+ bash -x /usr/local/share/bash-completion/bash_completion
bash: _parse_usage: line 16: syntax error near unexpected token `('
bash: _parse_usage: line 16: ` -?(\[)+([a-zA-Z0-9?]))'
bash: error importing function definition for `_parse_usage'
bash: _xinetd_services: line 5: syntax error near unexpected token `('
bash: _xinetd_services: line 5: ` local -a svcs=($(printf '%s\n' $xinetddir/!($_backup_glob)));'
++ __vte_prompt_command
++ local 'pwd=~'
++ '[' /usr/local/lib/crew/packages '!=' /home/chronos/user ']'
++ pwd=/usr/local/lib/crew/packages
++ pwd=/usr/local/lib/crew/packages
++ printf '\033]0;%s@%s:%s\033\' chronos localhost /usr/local/lib/crew/packages
++ __vte_osc7
+++ /usr/local/libexec/vte-urlencode-cwd
++ printf '\033]7;file://%s%s\033\' localhost /usr/local/lib/crew/packages
++ __git_ps1 '(%s)'
++ local exit=2
++ local pcmode=no
++ local detached=no
++ local 'ps1pc_start=\u@\h:\w '
++ local 'ps1pc_end=\$ '
++ local 'printf_format= (%s)'
++ case "$#" in
++ printf_format='(%s)'
++ local ps1_expanded=yes
++ '[' -z '' ']'
++ '[' -z '5.2.0(1)-release' ']'
++ shopt -q promptvars
++ local repo_info rev_parse_exit_code
+++ git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree --short HEAD
++ repo_info='/usr/local/lib/crew/.git
false
false
true
9b1e445'
++ rev_parse_exit_code=0
++ '[' -z '/usr/local/lib/crew/.git
false
false
true
9b1e445' ']'
++ local short_sha=
++ '[' 0 = 0 ']'
++ short_sha=9b1e445
++ repo_info='/usr/local/lib/crew/.git
false
false
true'
++ local inside_worktree=true
++ repo_info='/usr/local/lib/crew/.git
false
false'
++ local bare_repo=false
++ repo_info='/usr/local/lib/crew/.git
false'
++ local inside_gitdir=false
++ local g=/usr/local/lib/crew/.git
++ '[' true = true ']'
++ '[' -n '' ']'
++ local sparse=
++ '[' -z '' ']'
++ '[' -z '' ']'
+++ git config --bool core.sparseCheckout
++ '[' true = true ']'
++ sparse='|SPARSE'
++ local r=
++ local b=
++ local step=
++ local total=
++ '[' -d /usr/local/lib/crew/.git/rebase-merge ']'
++ '[' -d /usr/local/lib/crew/.git/rebase-apply ']'
++ '[' -f /usr/local/lib/crew/.git/MERGE_HEAD ']'
++ __git_sequencer_status
++ local todo
++ test -f /usr/local/lib/crew/.git/CHERRY_PICK_HEAD
++ test -f /usr/local/lib/crew/.git/REVERT_HEAD
++ __git_eread /usr/local/lib/crew/.git/sequencer/todo todo
++ test -r /usr/local/lib/crew/.git/sequencer/todo
++ return 1
++ '[' -f /usr/local/lib/crew/.git/BISECT_LOG ']'
++ '[' -n '' ']'
++ '[' -h /usr/local/lib/crew/.git/HEAD ']'
++ local head=
++ __git_eread /usr/local/lib/crew/.git/HEAD head
++ test -r /usr/local/lib/crew/.git/HEAD
++ IFS='
'
++ read head
++ b=refs/heads/master
++ '[' 'ref: refs/heads/master' = refs/heads/master ']'
++ '[' -n '' ']'
++ local w=
++ local i=
++ local s=
++ local u=
++ local h=
++ local c=
++ local p=
++ '[' true = false ']'
++ '[' true = true ']'
++ '[' -n yes ']'
+++ git config --bool bash.showDirtyState
++ '[' '' '!=' false ']'
++ git diff --no-ext-diff --quiet
++ git diff --no-ext-diff --cached --quiet
++ '[' -z 9b1e445 ']'
++ '[' -n yes ']'
++ git rev-parse --verify --quiet refs/stash
++ '[' -n yes ']'
+++ git config --bool bash.showUntrackedFiles
++ '[' '' '!=' false ']'
++ git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*'
++ u=%
++ '[' -n '' ']'
++ '[' -n auto ']'
++ __git_ps1_show_upstream
++ local key value
++ local svn_remote svn_url_pattern count n
++ local upstream=git legacy= verbose= name=
++ svn_remote=()
+++ tr '\0\n' '\n '
+++ git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$'
++ local output=
++ read -r key value
++ case "$key" in
++ read -r key value
++ local option
++ for option in ${GIT_PS1_SHOWUPSTREAM}
++ case "$option" in
++ case "$upstream" in
++ upstream='@{upstream}'
++ [[ -z '' ]]
+++ git rev-list --count --left-right '@{upstream}...HEAD'
++ count='0 102'
++ [[ -z '' ]]
++ case "$count" in
++ p='>'
++ local 'z= '
++ '[' -n yes ']'
++ '[' no = yes ']'
++ '[' -n '' ']'
++ b=master
++ '[' no = yes ']'
++ local f=%
++ local 'gitstring=master %|SPARSE>'
++ '[' no = yes ']'
++ printf -- '(%s)' 'master %|SPARSE>'
++ return 2
satmandu commented 1 year ago
chronos@localhost /usr/local/lib/crew/packages (master %|SPARSE>)$ . /usr/local/share/bash-completion/bash_completion 
+ . /usr/local/share/bash-completion/bash_completion
++ BASH_COMPLETION_VERSINFO=(2 11)
++ [[ imxBHs == *v* ]]
++ BASH_COMPLETION_ORIGINAL_V_VALUE=+v
++ [[ -n '' ]]
++ set +v
++ _blacklist_glob='@(acroread.sh)'
++ shopt -s extglob progcomp
++ complete -u groups slay w sux
++ complete -A stopped -P '"%' -S '"' bg
++ complete -j -P '"%' -S '"' fg jobs disown
++ complete -v readonly unset
++ complete -A setopt set
++ complete -A shopt shopt
++ complete -A helptopic help
++ complete -a unalias
++ complete -c command type which
++ complete -b builtin
++ [[ linux-gnu == *@(solaris|aix)* ]]
++ _backup_glob='@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))'
++ complete -F _service service
++ _sysvdirs
++ sysvdirs=()
++ [[ -d /etc/rc.d/init.d ]]
++ [[ -d /etc/init.d ]]
++ sysvdirs+=(/etc/init.d)
++ [[ -f /etc/slackware-version ]]
++ return 0
++ for svcdir in "${sysvdirs[@]}"
++ for svc in $svcdir/!($_backup_glob)
++ [[ -x /etc/init.d/functions.sh ]]
++ unset svc svcdir sysvdirs
++ [[ linux-gnu == *freebsd* ]]
++ shopt -u hostcomplete
++ complete -F _user_at_host talk ytalk finger
++ complete -F _known_hosts traceroute traceroute6 fping fping6 telnet rsh rlogin ftp dig mtr ssh-installkeys showmount
++ shopt -q cdable_vars
++ complete -F _cd -o nospace cd pushd
++ complete -F _command aoss command do else eval exec ltrace nice nohup padsp then time tsocks vsound xargs
++ complete -F _root_command fakeroot gksu gksudo kdesudo really
++ complete -F _longopt a2ps awk base64 bash bc bison cat chroot colordiff cp csplit cut date df diff dir du enscript env expand fmt fold gperf grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir sed seq shasum sha1sum sha224sum sha256sum sha384sum sha512sum shar sort split strip sum tac tail tee texindex touch tr uname unexpand uniq units vdir wc who
++ declare -Ag _xspecs
++ _install_xspec '!*.?(t)bz?(2)' bunzip2 bzcat pbunzip2 pbzcat lbunzip2 lbzcat
++ local 'xspec=!*.?(t)bz?(2)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.?(t)bz?(2)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.?(t)bz?(2)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.?(t)bz?(2)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.?(t)bz?(2)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.?(t)bz?(2)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.?(t)bz?(2)'
++ _install_xspec '!*.@(zip|[aegjswx]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|aab|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz|whl)' unzip zipinfo
++ local 'xspec=!*.@(zip|[aegjswx]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|aab|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz|whl)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(zip|[aegjswx]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|aab|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz|whl)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(zip|[aegjswx]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|aab|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz|whl)'
++ _install_xspec '*.Z' compress znew
++ local 'xspec=*.Z' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='*.Z'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.Z'
++ _install_xspec '!*.@(Z|[gGd]z|t[ag]z)' gunzip zcat
++ local 'xspec=!*.@(Z|[gGd]z|t[ag]z)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(Z|[gGd]z|t[ag]z)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(Z|[gGd]z|t[ag]z)'
++ _install_xspec '!*.@(Z|[gGdz]z|t[ag]z)' unpigz
++ local 'xspec=!*.@(Z|[gGdz]z|t[ag]z)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(Z|[gGdz]z|t[ag]z)'
++ _install_xspec '!*.Z' uncompress
++ local 'xspec=!*.Z' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.Z'
++ _install_xspec '!*.@(tlz|lzma)' lzcat lzegrep lzfgrep lzgrep lzless lzmore unlzma
++ local 'xspec=!*.@(tlz|lzma)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(tlz|lzma)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(tlz|lzma)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(tlz|lzma)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(tlz|lzma)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(tlz|lzma)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(tlz|lzma)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(tlz|lzma)'
++ _install_xspec '!*.@(?(t)xz|tlz|lzma)' unxz xzcat
++ local 'xspec=!*.@(?(t)xz|tlz|lzma)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(t)xz|tlz|lzma)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(t)xz|tlz|lzma)'
++ _install_xspec '!*.lrz' lrunzip
++ local 'xspec=!*.lrz' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.lrz'
++ _install_xspec '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
++ local 'xspec=!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)'
++ _install_xspec '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|svg)' qiv
++ local 'xspec=!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|svg)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|svg)'
++ _install_xspec '!*.@(gif|jp?(e)g?(2)|j2[ck]|jp[2f]|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)' xv
++ local 'xspec=!*.@(gif|jp?(e)g?(2)|j2[ck]|jp[2f]|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(gif|jp?(e)g?(2)|j2[ck]|jp[2f]|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)'
++ _install_xspec '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' gv ggv kghostview
++ local 'xspec=!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))'
++ _install_xspec '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi kdvi
++ local 'xspec=!*.@(dvi|DVI)?(.@(gz|Z|bz2))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(dvi|DVI)?(.@(gz|Z|bz2))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(dvi|DVI)?(.@(gz|Z|bz2))'
++ _install_xspec '!*.dvi' dvips dviselect dvitype dvipdf advi dvipdfm dvipdfmx
++ local 'xspec=!*.dvi' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.dvi'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.dvi'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.dvi'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.dvi'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.dvi'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.dvi'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.dvi'
++ _install_xspec '!*.[pf]df' acroread gpdf xpdf
++ local 'xspec=!*.[pf]df' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.[pf]df'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.[pf]df'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.[pf]df'
++ _install_xspec '!*.@(?(e)ps|pdf)' kpdf
++ local 'xspec=!*.@(?(e)ps|pdf)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(e)ps|pdf)'
++ _install_xspec '!*.@(okular|@(?(e|x)ps|?(E|X)PS|[pf]df|[PF]DF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM)?(.?(gz|GZ|bz2|BZ2|xz|XZ)))' okular
++ local 'xspec=!*.@(okular|@(?(e|x)ps|?(E|X)PS|[pf]df|[PF]DF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM)?(.?(gz|GZ|bz2|BZ2|xz|XZ)))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(okular|@(?(e|x)ps|?(E|X)PS|[pf]df|[PF]DF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM)?(.?(gz|GZ|bz2|BZ2|xz|XZ)))'
++ _install_xspec '!*.pdf' epdfview pdfunite
++ local 'xspec=!*.pdf' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.pdf'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.pdf'
++ _install_xspec '!*.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)' zathura
++ local 'xspec=!*.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)'
++ _install_xspec '!*.@(?(e)ps|pdf)' ps2pdf ps2pdf12 ps2pdf13 ps2pdf14 ps2pdfwr
++ local 'xspec=!*.@(?(e)ps|pdf)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(e)ps|pdf)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(e)ps|pdf)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(e)ps|pdf)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(e)ps|pdf)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(e)ps|pdf)'
++ _install_xspec '!*.texi*' makeinfo texi2html
++ local 'xspec=!*.texi*' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.texi*'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.texi*'
++ _install_xspec '!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi xetex xelatex luatex lualatex
++ local 'xspec=!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)'
++ _install_xspec '!*.mp3' mpg123 mpg321 madplay
++ local 'xspec=!*.mp3' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.mp3'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.mp3'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.mp3'
++ _install_xspec '!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))' xine aaxine fbxine
++ local 'xspec=!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))'
++ _install_xspec '!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))' kaffeine dragon totem
++ local 'xspec=!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmv]|OG[AGMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))'
++ _install_xspec '!*.@(avi|asf|wmv)' aviplay
++ local 'xspec=!*.@(avi|asf|wmv)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(avi|asf|wmv)'
++ _install_xspec '!*.@(rm?(j)|ra?(m)|smi?(l))' realplay
++ local 'xspec=!*.@(rm?(j)|ra?(m)|smi?(l))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(rm?(j)|ra?(m)|smi?(l))'
++ _install_xspec '!*.@(mpg|mpeg|avi|mov|qt)' xanim
++ local 'xspec=!*.@(mpg|mpeg|avi|mov|qt)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(mpg|mpeg|avi|mov|qt)'
++ _install_xspec '!*.@(og[ag]|m3u|flac|spx)' ogg123
++ local 'xspec=!*.@(og[ag]|m3u|flac|spx)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(og[ag]|m3u|flac|spx)'
++ _install_xspec '!*.@(mp3|ogg|pls|m3u)' gqmpeg freeamp
++ local 'xspec=!*.@(mp3|ogg|pls|m3u)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(mp3|ogg|pls|m3u)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(mp3|ogg|pls|m3u)'
++ _install_xspec '!*.fig' xfig
++ local 'xspec=!*.fig' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.fig'
++ _install_xspec '!*.@(mid?(i)|cmf)' playmidi
++ local 'xspec=!*.@(mid?(i)|cmf)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(mid?(i)|cmf)'
++ _install_xspec '!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)' timidity
++ local 'xspec=!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)'
++ _install_xspec '!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)' modplugplay modplug123
++ local 'xspec=!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)'
++ _install_xspec '*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
++ local 'xspec=*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ for cmd in "$@"
++ _xspecs[$cmd]='*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)'
++ _install_xspec '!*.@(zip|z|gz|tgz)' bzme
++ local 'xspec=!*.@(zip|z|gz|tgz)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(zip|z|gz|tgz)'
++ _install_xspec '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx galeon dillo elinks amaya epiphany
++ local 'xspec=!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
++ _install_xspec '!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)' oowriter lowriter
++ local 'xspec=!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)'
++ _install_xspec '!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)' ooimpress loimpress
++ local 'xspec=!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)'
++ _install_xspec '!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)' oocalc localc
++ local 'xspec=!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)'
++ _install_xspec '!*.@(sxd|std|sda|sdd|?(f)odg|otg)' oodraw lodraw
++ local 'xspec=!*.@(sxd|std|sda|sdd|?(f)odg|otg)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxd|std|sda|sdd|?(f)odg|otg)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxd|std|sda|sdd|?(f)odg|otg)'
++ _install_xspec '!*.@(sxm|smf|mml|odf)' oomath lomath
++ local 'xspec=!*.@(sxm|smf|mml|odf)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxm|smf|mml|odf)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(sxm|smf|mml|odf)'
++ _install_xspec '!*.odb' oobase lobase
++ local 'xspec=!*.odb' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.odb'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.odb'
++ _install_xspec '!*.[rs]pm' rpm2cpio
++ local 'xspec=!*.[rs]pm' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.[rs]pm'
++ _install_xspec '!*.aux' bibtex
++ local 'xspec=!*.aux' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.aux'
++ _install_xspec '!*.po' poedit gtranslator kbabel lokalize
++ local 'xspec=!*.po' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.po'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.po'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.po'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.po'
++ _install_xspec '!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])' harbour gharbour hbpp
++ local 'xspec=!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])'
++ _install_xspec '!*.[Hh][Rr][Bb]' hbrun
++ local 'xspec=!*.[Hh][Rr][Bb]' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.[Hh][Rr][Bb]'
++ _install_xspec '!*.ly' lilypond ly2dvi
++ local 'xspec=!*.ly' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.ly'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.ly'
++ _install_xspec '!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))' cdiff
++ local 'xspec=!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))'
++ _install_xspec '!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)' portecle
++ local 'xspec=!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)'
++ _install_xspec '!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)' kid3 kid3-qt
++ local 'xspec=!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)' cmd
++ shift
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)'
++ for cmd in "$@"
++ _xspecs[$cmd]='!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)'
++ unset -f _install_xspec
++ complete -F _minimal ''
++ complete -D -F _completion_loader
++ compat_dir=/usr/local/etc/bash_completion.d
++ [[ -d /usr/local/etc/bash_completion.d ]]
++ [[ -r /usr/local/etc/bash_completion.d ]]
++ [[ -x /usr/local/etc/bash_completion.d ]]
++ for i in "$compat_dir"/*
++ [[ dbus-bash-completion.sh != @(@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))|Makefile*|@(acroread.sh)) ]]
++ [[ -f /usr/local/etc/bash_completion.d/dbus-bash-completion.sh ]]
++ [[ -r /usr/local/etc/bash_completion.d/dbus-bash-completion.sh ]]
++ . /usr/local/etc/bash_completion.d/dbus-bash-completion.sh
+++ '[' -z '5.2.0(1)-release' ']'
+++ complete -o nospace -F __dbus_send dbus-send
++ for i in "$compat_dir"/*
++ [[ lilv != @(@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))|Makefile*|@(acroread.sh)) ]]
++ [[ -f /usr/local/etc/bash_completion.d/lilv ]]
++ [[ -r /usr/local/etc/bash_completion.d/lilv ]]
++ . /usr/local/etc/bash_completion.d/lilv
+++ complete -F _lv2info lv2info
+++ complete -F _lv2info lv2jack
++ unset compat_dir i _blacklist_glob
++ user_completion=/home/chronos/user/.bash_completion
++ [[ /usr/local/share/bash-completion/bash_completion != \/\h\o\m\e\/\c\h\r\o\n\o\s\/\u\s\e\r\/\.\b\a\s\h\_\c\o\m\p\l\e\t\i\o\n ]]
++ [[ -r /home/chronos/user/.bash_completion ]]
++ unset user_completion
++ unset -f have
++ unset have
++ set +v
++ unset BASH_COMPLETION_ORIGINAL_V_VALUE
++ __vte_prompt_command
++ local 'pwd=~'
++ '[' /usr/local/lib/crew/packages '!=' /home/chronos/user ']'
++ pwd=/usr/local/lib/crew/packages
++ pwd=/usr/local/lib/crew/packages
++ printf '\033]0;%s@%s:%s\033\' chronos localhost /usr/local/lib/crew/packages
++ __vte_osc7
+++ /usr/local/libexec/vte-urlencode-cwd
++ printf '\033]7;file://%s%s\033\' localhost /usr/local/lib/crew/packages
++ __git_ps1 '(%s)'
++ local exit=0
++ local pcmode=no
++ local detached=no
++ local 'ps1pc_start=\u@\h:\w '
++ local 'ps1pc_end=\$ '
++ local 'printf_format= (%s)'
++ case "$#" in
++ printf_format='(%s)'
++ local ps1_expanded=yes
++ '[' -z '' ']'
++ '[' -z '5.2.0(1)-release' ']'
++ shopt -q promptvars
++ local repo_info rev_parse_exit_code
+++ git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree --short HEAD
++ repo_info='/usr/local/lib/crew/.git
false
false
true
9b1e445'
++ rev_parse_exit_code=0
++ '[' -z '/usr/local/lib/crew/.git
false
false
true
9b1e445' ']'
++ local short_sha=
++ '[' 0 = 0 ']'
++ short_sha=9b1e445
++ repo_info='/usr/local/lib/crew/.git
false
false
true'
++ local inside_worktree=true
++ repo_info='/usr/local/lib/crew/.git
false
false'
++ local bare_repo=false
++ repo_info='/usr/local/lib/crew/.git
false'
++ local inside_gitdir=false
++ local g=/usr/local/lib/crew/.git
++ '[' true = true ']'
++ '[' -n '' ']'
++ local sparse=
++ '[' -z '' ']'
++ '[' -z '' ']'
+++ git config --bool core.sparseCheckout
++ '[' true = true ']'
++ sparse='|SPARSE'
++ local r=
++ local b=
++ local step=
++ local total=
++ '[' -d /usr/local/lib/crew/.git/rebase-merge ']'
++ '[' -d /usr/local/lib/crew/.git/rebase-apply ']'
++ '[' -f /usr/local/lib/crew/.git/MERGE_HEAD ']'
++ __git_sequencer_status
++ local todo
++ test -f /usr/local/lib/crew/.git/CHERRY_PICK_HEAD
++ test -f /usr/local/lib/crew/.git/REVERT_HEAD
++ __git_eread /usr/local/lib/crew/.git/sequencer/todo todo
++ test -r /usr/local/lib/crew/.git/sequencer/todo
++ return 1
++ '[' -f /usr/local/lib/crew/.git/BISECT_LOG ']'
++ '[' -n '' ']'
++ '[' -h /usr/local/lib/crew/.git/HEAD ']'
++ local head=
++ __git_eread /usr/local/lib/crew/.git/HEAD head
++ test -r /usr/local/lib/crew/.git/HEAD
++ IFS='
'
++ read head
++ b=refs/heads/master
++ '[' 'ref: refs/heads/master' = refs/heads/master ']'
++ '[' -n '' ']'
++ local w=
++ local i=
++ local s=
++ local u=
++ local h=
++ local c=
++ local p=
++ '[' true = false ']'
++ '[' true = true ']'
++ '[' -n yes ']'
+++ git config --bool bash.showDirtyState
++ '[' '' '!=' false ']'
++ git diff --no-ext-diff --quiet
++ git diff --no-ext-diff --cached --quiet
++ '[' -z 9b1e445 ']'
++ '[' -n yes ']'
++ git rev-parse --verify --quiet refs/stash
++ '[' -n yes ']'
+++ git config --bool bash.showUntrackedFiles
++ '[' '' '!=' false ']'
++ git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*'
++ u=%
++ '[' -n '' ']'
++ '[' -n auto ']'
++ __git_ps1_show_upstream
++ local key value
++ local svn_remote svn_url_pattern count n
++ local upstream=git legacy= verbose= name=
++ svn_remote=()
+++ git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$'
+++ tr '\0\n' '\n '
++ local output=
++ read -r key value
++ case "$key" in
++ read -r key value
++ local option
++ for option in ${GIT_PS1_SHOWUPSTREAM}
++ case "$option" in
++ case "$upstream" in
++ upstream='@{upstream}'
++ [[ -z '' ]]
+++ git rev-list --count --left-right '@{upstream}...HEAD'
++ count='0 102'
++ [[ -z '' ]]
++ case "$count" in
++ p='>'
++ local 'z= '
++ '[' -n yes ']'
++ '[' no = yes ']'
++ '[' -n '' ']'
++ b=master
++ '[' no = yes ']'
++ local f=%
++ local 'gitstring=master %|SPARSE>'
++ '[' no = yes ']'
++ printf -- '(%s)' 'master %|SPARSE>'
++ return 0
scop commented 1 year ago

The issue report instructions advise to attach the debug info here for a reason :) Inlining trashes the report.

Anyway, the cited error does not occur in the output when sourcing bash_completion, which is the proper way to use the file. It only occurs in the first one, which runs (not sources) it, which as said is not how it is intended to be used.

Can you reproduce the error somehow by sourcing (not running) bash_completion?

satmandu commented 1 year ago

Sourcing bash_completion doesn't cause any issues.

Upon further digging, this is not a bash_completion issue but some weirdness with starting a shell from the built-in bash shell on these systems. Sourcing and not running scripts works around this issue.

Sorry for wasting your time, and thanks for the valuable feedback!