From: Junio C Hamano Date: Fri, 03 Feb 2012 21:50:33 GMT Subject: Re: [PATCH] t0300-credentials: Word around a solaris /bin/sh bug Message-ID: <7vr4ybmvrq.fsf@alter.siamese.dyndns.org> In-Reply-To: <20120203212604.GA1890@sigill.intra.peff.net> Jeff King writes: >> without requiring the brain-cycle to waste on the "Is this simple enough >> for even Solaris to grok?" guess game. This should also be reusable for >> other stuff like $PERL_PATH, I would think. > > I like it. Even better would be: > > write_script() { > echo "#!$2" >"$1" && > cat >>"$1" && > chmod +x "$1" > } > > write_script foo.sh "$SHELL_PATH" <<-\EOF > echo my arguments are "$@" > EOF I first thought that the order of parameters were unusual, but with that order, you could even go something fancier like: write_script () { case "$#" in 1) case "$1" in *.perl | *.pl) echo "#!$PERL_PATH" ;; *) echo "#!$SHELL_PATH" ;; esac 2) echo "#!$2" ;; *) BUG ;; esac >"$1" && cat >>"$1" && chmod +x "$1" } write_script foo.sh write_script bar.perl write_script pre-receive /no/frobnication/today The tongue-in-cheek comment aside, I think ${2-"$SHELL_PATH"} or some form of fallback would be a good idea in any case, as 99% of the time what we write in the test scripts is a shell script. Also "chmod +x" is a very good idea.