Does Mac OS X's bash read scripts for all users (tab-completion scripts) from /opt/local/etc/bash_completion.d path?
I stumbled upon some instructions in the book "Pro Git"
It suggests:
-
Download this file : https://github.com/git/git/blob/master/contrib/completion/git-completion.bash
If you use the Bash shell, Git comes with a nice auto-completion script you can enable. Download it directly from the Git source code at https://github.com/git/git/blob/master/contrib/completion/git-completion.bash . Copy this file to your home directory, and add this to your
.bashrc
file:source ~/git-completion.bash
Source https://github.com/progit/progit/blame/master/en/02-git-basics/01-chapter2.markdown#L1115
(putting this line in .bashrc will not work in Mac OS X systems which I discussed here: Why doesn't Mac OS X source ~/.bashrc?)
-
Put this file
git-completion.bash
( in/opt/local/etc/bash_completion.d
if you want bash completion (for the git command) to work on all user accounts. (As if bash reads all the scripts in/opt/local/etc/bash_completion.d
)If you want to set up Git to automatically have Bash shell completion for all users, copy this script to the
/opt/local/etc/bash_completion.d
directory on Mac systems or to the/etc/bash_completion.d/
directory on Linux systems. This is a directory of scripts that Bash will automatically load to provide shell completions.Source : https://github.com/progit/progit/blame/master/en/02-git-basics/01-chapter2.markdown#L1119
I found out that Mac OS's bash DOES NOT read scripts inside /opt/local/etc/bash_completion.d
. I put the file there (I created all the folders, because they didn't exist) :
And git completion doesn't work on any account.
Does Mac OS X's bash read scripts for all users from /opt/local/etc/bash_completion.d
?
Is the "Pro Git" book wrong ? Can I report it on their Github page ?
Or am I wrong ?
Solution 1:
Bash only reads scripts by default in your home directory, or if they are missing in /etc
. See Bash's documentation. If using OSX's Terminal.app then by default it reads ~/.bash_profile
.
This is true of all bash on Linux or other OSes.
To read from another directory e.g. /opt/local/etc/bash_completion.d
you have to edit your start up files to source (i.e. include) the files from there
The instructions for the script do not mention /opt/local/...
which is a non standard location on any Unix. (by non-standard it is allowed to be used by third party packages but not defined what should be in there) They say
- Copy this file to somewhere (e.g.
~/.git-completion.sh
).Add the following line to your
.bashrc
/.zshrc
:source ~/.git-completion.sh
- Consider changing your PS1 to also show the current branch, see
git-prompt.sh
for details.
The progit quote assumes you know bash. All it is saying is put the files from the first quote into a specific place if you want all users on the machine to use them and not in ~
where only the user installing it can see them. i.e. the point is multi user versus single user.
He also picks that path as nothing else uses it and you should not edit /etc
files in OS X as Apple's OS upgrades could overwrite them so you need to choose another place. (I would have chosen something under /usr/local
as there is where manually maintained scripts are meant to go).
~/.bashrc
is the correct place to edit and add the source. See your other question and the bash manual for setting up ~/.bash_profile
The bash suggested way is source .bashrc
into .bash_profile
. Note that on OS X using Terminal.app is not the one way of running shells so there can be sessions starting with .bashrc
.