From owner-freebsd-hackers@FreeBSD.ORG Sun Sep 22 23:56:12 2013 Return-Path: Delivered-To: freebsd-hackers@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DA0F6D44; Sun, 22 Sep 2013 23:56:11 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from mho-02-ewr.mailhop.org (mho-02-ewr.mailhop.org [204.13.248.72]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id AD88D2092; Sun, 22 Sep 2013 23:56:11 +0000 (UTC) Received: from c-24-8-230-52.hsd1.co.comcast.net ([24.8.230.52] helo=damnhippie.dyndns.org) by mho-02-ewr.mailhop.org with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.72) (envelope-from ) id 1VNtVa-0007xk-H9; Sun, 22 Sep 2013 23:56:10 +0000 Received: from [172.22.42.240] (revolution.hippie.lan [172.22.42.240]) by damnhippie.dyndns.org (8.14.3/8.14.3) with ESMTP id r8MNu7PR022792; Sun, 22 Sep 2013 17:56:07 -0600 (MDT) (envelope-from ian@FreeBSD.org) X-Mail-Handler: Dyn Standard SMTP by Dyn X-Originating-IP: 24.8.230.52 X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/sendlabs/outbound_abuse.html for abuse reporting information) X-MHO-User: U2FsdGVkX1/eINHNuKI1Do/W+Dt8pzPd Subject: Re: The right way to invoke sh from a freebsd makefile? From: Ian Lepore To: Glen Barber In-Reply-To: <20130922234555.GE2336@glenbarber.us> References: <1379891905.1197.115.camel@revolution.hippie.lan> <20130922232710.GD2336@glenbarber.us> <1379893071.1197.119.camel@revolution.hippie.lan> <20130922234555.GE2336@glenbarber.us> Content-Type: text/plain; charset="us-ascii" Date: Sun, 22 Sep 2013 17:56:07 -0600 Message-ID: <1379894167.1197.126.camel@revolution.hippie.lan> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit Cc: FreeBSD Hackers , freebsd-current X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Sep 2013 23:56:12 -0000 On Sun, 2013-09-22 at 19:45 -0400, Glen Barber wrote: > On Sun, Sep 22, 2013 at 05:37:51PM -0600, Ian Lepore wrote: > > On Sun, 2013-09-22 at 19:27 -0400, Glen Barber wrote: > > > On Sun, Sep 22, 2013 at 05:18:25PM -0600, Ian Lepore wrote: > > > > What's the right way to launch the bourne shell from a makefile? I had > > > > assumed the ${SHELL} variable would be set to "the right" copy > > > > of /bin/sh (like maybe the one in tmp or legacy at various stages). It > > > > appears that that's not the case, and ${SHELL} is whatever comes from > > > > the environment, which can lead to using csh or bash or whatever. > > > > > > > > I see some of our makefiles use just a bare "sh" which seems reasonable > > > > to me, but I don't want to glitch this in src/include/Makefile again. > > > > The goal is to run a script in src/include/Makefile by launching sh with > > > > the script name (as opposed to launching the script and letting the #! > > > > do its thing, which doesn't work if the source dir is mounted noexec). > > > > > > > > > > I think BUILDENV_SHELL is what you are looking for. For this specific > > > case, I think instead of '#!/bin/sh', maybe '#!/usr/bin/env sh' may be > > > preferable. > > > > > > Glen > > > > > > > No, BUILDENV_SHELL is a special thing... it's used when you "make > > buildenv" to chroot into a cross-build environment to work > > interactively. I added that long ago because I can't live in a csh > > shell (I mean, I can't do anything, I'm totally lost), and I wanted a > > way to have "make buildenv" put me right into bash (of course, you have > > to have bash in the chroot). > > > > Ah, right. Thanks for the sanity check. > > > The flavor of hashbang to use shouldn't matter, since what I'm after > > here is launching the shell to run the script without using the hashbang > > mechanism. > > > > You can hard-code /bin/sh directly, but what I was getting at with the > '#!/usr/bin/env sh' is that the 'sh' interpreter of the build > environment could be used (instead of /bin/sh directly). Then you don't > need to worry about the path to sh(1). > > Glen > My point is that the #! isn't used at all in this case, it doesn't matter what's there. Try this... echo "echo foo" >/tmp/foo sh /tmp/foo Not only does it not need the hashbang, the script doesn't even have to be executable when you launch sh and name a script on the command line, which is just what's needed to run a script from a directory mounted with the noexec flag. -- Ian