From: Junio C Hamano Date: Thu, 29 Jul 2010 16:25:32 GMT Subject: Re: [PATCH] bash-completion: Print a useful error when called in a non-bash shell Message-ID: <7v4ofiuuf7.fsf@alter.siamese.dyndns.org> In-Reply-To: <4C50B005.1030004@pileofstuff.org> Andrew Sayers writes: > 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 > --- > +# Check in case we were called with something like "sh git-completion.bash": > +$( > + exec 2>/dev/null > + $(exec < <( )) > + ) > +if [[ 0 -ne $? ]] > +then > + cat < + > +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 > + BASH_VERSION: {$BASH_VERSION} > + BASHOPTS: {$BASHOPTS} > + SHELLOPTS: {$SHELLOPTS} > + POSIXLY_CORRECT: {$POSIXLY_CORRECT} > +EOF > + echo -n " command line: {" > + tr '\0' ' ' < /proc/$$/cmdline This looks like a Linux-ism to me.