Avoid sourcing /etc/bash_completion twice for Debian-based distributions.
authorW. Trevor King <wking@drexel.edu>
Thu, 1 Dec 2011 13:50:36 +0000 (08:50 -0500)
committerW. Trevor King <wking@drexel.edu>
Thu, 1 Dec 2011 13:50:36 +0000 (08:50 -0500)
On a system running Debian 5.0 (Lenny), running /etc/bash_completion
once sets some variables (e.g. BASH_COMPLETION) and then makes them
read-only.  Running /etc/bash_completion again raises errors when it
tries to reset these read-only variables, and the script bails, taking
down all subsequent .bashrc processing with it.  Work around this
problem by only sourcing /etc/bash_completion if the BASH_COMPLETION
variable is empty.

Later versions of /etc/bash_completion avoid this issue by only
setting the variables if they are empty.

Versions affected:
  Debian 5.0 (Lenny) running /etc/bash_completion 20060301
  Ubuntu 8.04.4      running /etc/bash_completion 20060301
Versions not affected:
  Ubuntu 9.04        running /etc/bash_completion 20080617.5
  Ubuntu 10.04.2     running /etc/bash_completion 1.1 (2009)
  Ubuntu 10.04.3     running /etc/bash_completion 1.1 (2009)

The fix should work with all the versions I've seen.

src/.bashrc.d/20completion

index 0c50784f424169fc221d205ce1d17ac3b7e12831..b99ebd9c50c4945579a505796837f9c173f480d1 100644 (file)
@@ -20,7 +20,7 @@ elif [ "${OS}" = 'Debian' ] || [ "${OS}" = 'Ubuntu' ]; then
        #   /etc/bash_completion
        # You won't need to enable this if you uncommented the appropriate
        # section in /etc/bash.bashrc.
-       if [ -f /etc/bash_completion ]; then
+       if [ -f /etc/bash_completion ] && [ -z "${BASH_COMPLETION}" ]; then
                . /etc/bash_completion
        fi
 fi