From: Junio C Hamano Date: Fri, 03 Feb 2012 20:32:15 GMT Subject: Re: [PATCH] t0300-credentials: Word around a solaris /bin/sh bug Message-ID: <7v7h03odyo.fsf@alter.siamese.dyndns.org> In-Reply-To: <20120203120657.GB31441@sigill.intra.peff.net> Jeff King writes: > cat >foo.sh <<\EOF > #!/bin/sh > echo my arguments are "$@" > EOF > > cannot have the mechanical replace you mentioned above. It would need: > > cat >foo.sh < #!$SHELL_PATH > echo my arguments are "\$@" > EOF > > or: > > { > echo "#!$SHELL_PATH" && > cat < echo my arguments are "$@" > EOF > } >foo.sh > > When I have hard-coded "#!/bin/sh", my thinking is usually "this is less > cumbersome to type and to read, and this script-let is so small that > even Solaris will get it right". I am toying with the pros-and-cons of write_script () { echo "#!$1" shift cat } so that the above can become write_script "$SHELL_PATH" >foo.sh <<-EOF echo my arguments are "\$@" EOF 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.