Public bug reported: Binary package hint: bash-completion
The main /etc/bash_completion script and many of the helper scripts under /etc/bash_completion.d/ fail for shells running with one or both of "set -o nounset" (fail if variables are used without being defined) and/or "shopt -s failglob" (fail if a GLOB pattern fails to match). I run my interactive shells with both these options set. For example: bash$ set -o nounset bash$ source /etc/bash_completion.ORIG bash: BASH_COMPLETION_DEBUG: unbound variable bash: BASH_COMPLETION: unbound variable bash: BASH_COMPLETION_DIR: unbound variable bash: BASH_COMPLETION_COMPAT_DIR: unbound variable bash: BASH_COMPLETION: unbound variable bash: li...@]: unbound variable bash: BASH_COMPLETION_COMPAT_DIR: unbound variable bash: BASH_COMPLETION_DIR: unbound variable bash: BASH_COMPLETION: unbound variable Also, a few of the "eval" expressions in the scripts use backslashes but fail to fully protect square bracket characters on arrays, which are then taken as failed GLOB expressions. The attached patch fixes at least some of the problems with the main script so that it runs without error for shells using "set -o nounset" and "shopt -s failglob". The helper scripts for findutils and mutt in /etc/bash_completion.d/ also have errors when used in shells using "set -o nounset" and "shopt -s failglob", but I'm not so confident that I understand them to fix them correctly. Here are some patches that remove some of the errors in these scripts but don't seem to fully work properly: --- .findutils.ORIG 2010-08-06 19:39:13.000000000 -0400 +++ findutils 2010-10-18 11:52:07.982166655 -0400 @@ -5,7 +5,7 @@ have find && _find() { - local cur prev i exprfound onlyonce + local cur prev i exprfound= onlyonce COMPREPLY=() _get_comp_words_by_ref cur prev --- .mutt.ORIG 2010-08-06 19:39:13.000000000 -0400 +++ mutt 2010-10-12 11:23:48.717163963 -0400 @@ -22,6 +22,7 @@ _muttrc() { # Search COMP_WORDS for '-F muttrc' or '-Fmuttrc' argument + local muttrc= set -- "${comp_wor...@]}" while [ $# -gt 0 ]; do if [ "${1:0:2}" = -F ]; then @@ -55,13 +56,14 @@ sofar=" $1 " shift - while [[ "$1" ]]; do - newconffiles=( $(sed -n 's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' $(eval echo $1) ) ) - for file in "${newconffil...@]}"; do + while [[ $# -gt 0 && "$1" ]]; do + newconffiles=( $(sed -n 's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' "$1" ) ) + for file in "${newconffil...@]-}"; do [[ ! "$file" ]] || [[ "${sofar/ ${file} / }" != "$sofar" ]] && continue sofar="$sofar $file" - sofar=" $(eval _muttconffiles \"$sofar\" $file) " + sofar=$(_muttconffiles "$sofar" "$file") done shift done @@ -80,8 +82,8 @@ conffiles=( $(eval _muttconffiles $muttrc $muttrc) ) aliases=( $( sed -n 's|^alias[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' \ - $(eval echo "${conffil...@]}") ) ) - COMPREPLY=( "${comprep...@]}" $( compgen -W "${aliases[*]}" -- "$cur" ) ) + $(eval echo "${conffil...@]:-/dev/null}") ) ) + COMPREPLY=( "${comprep...@]-}" $( compgen -W "${aliases[*]-}" -- "$cur" ) ) return 0 } @@ -101,7 +103,7 @@ sed -n '2,$s|^\([^[:space:]]\{1,\}\).*|\1|p' ) ) fi - COMPREPLY=( "${comprep...@]}" $( compgen -W "${queryresults[*]}" \ + COMPREPLY=( "${comprep...@]-}" $( compgen -W "${queryresults[*]-}" \ -- "$cur" ) ) return 0 ProblemType: Bug DistroRelease: Ubuntu 10.10 Package: bash-completion 1:1.2-2ubuntu1 ProcVersionSignature: Ubuntu 2.6.35-22.34-generic 2.6.35.4 Uname: Linux 2.6.35-22-generic x86_64 Architecture: amd64 Date: Tue Oct 19 02:08:30 2010 EcryptfsInUse: Yes InstallationMedia: Ubuntu 10.10 "Maverick Meerkat" - Release amd64 (20101007) PackageArchitecture: all ProcEnviron: LC_CTYPE=en_CA.utf8 LC_COLLATE=C PATH=(custom, user) LANG=C SHELL=/bin/bash SourcePackage: bash-completion ** Affects: bash-completion (Ubuntu) Importance: Undecided Status: New ** Tags: amd64 apport-bug maverick -- bash_completion script errors: undefined variables, failed GLOB https://bugs.launchpad.net/bugs/663111 You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs