Re: [PATCH] bash-completion: Print a useful error when called in a non-bash shell
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 29, 2010, 16:25 UTC
- Message-ID
- <7v4ofiuuf7.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <4C50B005.1030004@pileofstuff.org>
Andrew Sayers <andrew-git@pileofstuff.org> writes:
Show 11 quoted lines
> Detect whether the shell supports process substitution with <() > Shells that fail the test will not be able to load git-completion.bash > > If a bad shell is found, print a warning which gives the user as much debugging > information as possible. > > This was added in response to a bug report on the git mailing list: > http://permalink.gmane.org/gmane.comp.version-control.git/151723 > > Signed-off-by: Andrew Sayers <andrew-git@pileofstuff.org> > ---
Show 13 quoted lines
> +# Check in case we were called with something like "sh git-completion.bash": > +$( > + exec 2>/dev/null > + $(exec < <( )) > + ) > +if [[ 0 -ne $? ]] > +then > + cat <<EOF > + > +ERROR: you don't seem to be running a full bash shell. > +git-completion.bash is probably about to fail with a syntax error. > +If you are sure that your system is calling git-completion.bash from a bash, > +then please include the following in a bug report to git@vger.kernel.org:
I needed to read this twice to realize that majority of people who will ever see this message on their screen are _not_ expected to send any bug report to us. Also if the user's "full bash" groks <() indirection but still fails to run completion script correctly, this message does not help them to find where to file a bug report at all.
I do agree that there need to be a way to find that information for the end users, especially for those who just use binary-packaged git given by their distros, but this codepath is _not_ the place to do it.
How about replacing these with something simple like:
echo >&2 "You are not running full 'bash'; exiting." ; exit 127
Show 7 quoted lines
> + BASH_VERSION: {$BASH_VERSION}
> + BASHOPTS: {$BASHOPTS}
> + SHELLOPTS: {$SHELLOPTS}
> + POSIXLY_CORRECT: {$POSIXLY_CORRECT}
> +EOF
> + echo -n " command line: {"
> + tr '\0' ' ' < /proc/$$/cmdlineThis looks like a Linux-ism to me.