[Bash-completion-devel] [bash-completion-Bugs][311708] [PATCH] Make BASH_COMPLETION_DIR an array

bash-completion-bugs at alioth.debian.org bash-completion-bugs at alioth.debian.org
Fri May 29 22:24:29 UTC 2009

Bugs item #311708, was changed at 2009-05-29 00:50 by Sung Pae
You can respond by visiting: 

Status: Closed
Priority: 3
Submitted By: Sung Pae (guns-guest)
Assigned to: Nobody (None)
Summary: [PATCH] Make BASH_COMPLETION_DIR an array 
Distribution: None
Originally reported in: None
Milestone: None
Status: None
Original bug number: 

Initial Comment:
Hi, very glad to see progress on the bash-completion project!

I have been rolling my own version of Ian McDonald's bash-completion with my shell environment / software distribution application, and would love to see some of my favorite changes incorporated into the main tree.

One of those is setting BASH_COMPLETION_DIR as an array so that multiple bash completion directories can be sourced. This is a simple change, has no ill effects for regular one-directory use, and allows admins to source /usr/local/etc/bash_completion.d, /opt/*/etc/bash_completion.d, et cetera, as well as the main completion directory.

This would also encourage the user to create separate files for completions, instead of using ./.bash_completion; I imagine this will be helpful in the future, when dynamic loading of completion files is realized.


Comment By: Sung Pae (guns-guest)
Date: 2009-05-29 17:24

BASH_COMPLETION_DIR as an array has been working well for me so far, but I see how it doesn't adapt to future uses (dynamic completions?). Totally agree that colon delimited strings are more workable in bash until arrays are given a proper implementation.

Thanks for the link. I see that you guys are looking farther ahead than I imagined. Very exciting news, good to see smart hackers on this project.


Comment By: Freddy Vulto (fvu-guest)
Date: 2009-05-29 15:18

Hi, problem with real bash arrays is that they're not exportable to a subshell, as opposed to a colon-separated array/string:

   $ export a=(foo bar) b=foo:bar
   $ echo ${a[@]} $b
   foo bar foo:bar
   $ bash
   $ echo ${a[@]} $b
   foo:bar  # $a is gone

This might not be a problem if completion is always sourced within the current shell, but having to set BASH_COMPLETION_DIR in the current shell will fail anyone out there who's relying on export.

So while an array is good, I prefer the colon-separated notation - as in $PATH.  Doing so will probably be part of the "New Directory Layout" release.  See also: http://wiki.debian.org/Teams/BashCompletion/Proposals/NewDirectoryLayout

Thanks, Freddy


Comment By: Sung Pae (guns-guest)
Date: 2009-05-29 01:50

Oops, didn't see that the first check was wrapped in a [ ] test. Trying to upload updated patch


You can respond by visiting: 

More information about the Bash-completion-devel mailing list