Path: csiph.com!xmission!news.snarked.org!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail From: Stephane Chazelas Newsgroups: gnu.bash.bug Subject: Re: "sh -a" sets the POSIXLY_CORRECT *environment* variable Date: Wed, 15 Aug 2018 20:23:25 +0100 Lines: 75 Approved: bug-bash@gnu.org Message-ID: References: <20180814155026.rr3f52t7six2frsv@chaz.gmail.com> <3fc90f34-c477-52c7-e56d-83a54c91fbee@case.edu> NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: usenet.stanford.edu 1534361016 21609 208.118.235.17 (15 Aug 2018 19:23:36 GMT) X-Complaints-To: action@cs.stanford.edu Cc: bug-bash@gnu.org To: Chet Ramey Envelope-to: bug-bash@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=4DknAvdoiw0afal7rOlWLzdZf8bZEyvARHpkhrXUq6g=; b=S01aWG1U6STq4qaxRZ7l22zmaGYSrT+pe3UXhJVySuTdAnsii0SLbjUUeKjNplfOZy 0qEhRyakRcKHDXukv/O7iKm85V29ZXhdESf3X0l5K/wZIOFYk7NgGQe68ISzA9RRXl9D Qe7+qzvHA8dFltFH/6tdZVWeBkdZoHZTYrLH5r4kmBsx+ww0Z2HUau7yxvTU5Olc2yOk MXPjcJL26cwK6PjwIGw8Mamcp9YyaN+5XveSXenXz2nFW1Bon+DQOy//ccFA6cla9u/m Ntef2FVYwbca9CorqCrlqhHHl4+o/2tQhkJMripJ1GqTGCyNjKxx62md1AqitV2BAQiX wNKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=4DknAvdoiw0afal7rOlWLzdZf8bZEyvARHpkhrXUq6g=; b=F45O5A9yZWwu/760IqbT2hMpTXx5Ao/IHsp0gxSqecBLOE7dgPHXPtc1oelCghu7sV axNgpVkqiiIjYiawdNg4I4Db9tk0nezFFSxhh9LU4gAfD0ezFdlochtUv51+jK6MpfUX yQxA0oqscsxX2IA/HO2sgR6nTfRE7F/Z8CGBEA+a5305uBjBottuMO/kBX4K7++KRZGo Uo1cMr5nCafCBViRt/U16rJvS8r1T63Oe4Th1lSw1RsOfYxEfowszBnzczGqSRgAS9dl W56IHKYj/lWj9oKMc/yZ7ri7GzPMpslwVzGiWaK9Nq3gkmV/kFDxJ1YbBADYX3HwKDRJ vM7Q== X-Gm-Message-State: AOUpUlFJIvN0xbKB79CYwNFbJ5c0orvKlwDTckQY22zaXpdqL+tutgi7 WN0B50D+CX8NCT7nyzxkwY0= X-Google-Smtp-Source: AA+uWPwHksCDV8XkGZOP1weEPgMH89JDHJRA2JnERewkzr4gxCXPUGjfvkgzcZIVnbtp+jgMY/VtIQ== X-Received: by 2002:adf:a907:: with SMTP id u7-v6mr18007931wrc.175.1534361007209; Wed, 15 Aug 2018 12:23:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <3fc90f34-c477-52c7-e56d-83a54c91fbee@case.edu> User-Agent: NeoMutt/20171215 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com gnu.bash.bug:14503 2018-08-15 11:05:06 -0400, Chet Ramey: > On 8/14/18 11:50 AM, Stephane Chazelas wrote: > > Hi, > > > > This is from > > https://unix.stackexchange.com/questions/462333/why-does-a-in-bin-sh-a-affect-sed-and-set-a-doesnt > > (original investigation by Mark Plotnick) > > > > Though not documented, enabling the POSIX mode in bash whether > > with > > > > - bash -o posix > > - sh > > - env SHELLOPTS=posix bash > > - set -o posix # within bash > > > > causes it to set the value of the $POSIXLY_CORRECT shell > > variable to "y" (if it was not already set) > > Yes. This behavior dates from early 1997. It was put in on request so users > could get a posix environment from the shell, since GNU utilities > understand the POSIXLY_CORRECT variable. I could improve the documentation > there, but a 20-plus-year-old feature isn't going to change. [...] Maybe there was a misunderstanding. It's fine that bash enters POSIX mode when $POSIXLY_CORRECT is set. IOW, it's fine that bash enters POSIX mode when the users request it. The problem I'm trying to raise is about the reverse behaviour: that bash takes upon itself to request POSIX mode of all other utilities when it itself enters POSIX mode, that it sets $POSIXLY_CORRECT when it enters POSIX mode. The problem would show up mostly with #! /bin/sh -a scripts on systems where sh is bash, and where the script relies on non-POSIX behaviours of some GNU utilities. I can't see how that could be seen as a feature, I can't imagine anyone wanting that. If one wants to get a POSIX environment on a GNU system, they would do: export POSIXLY_CORRECT=y (and yes, it's good that bash does honour it) (and yes, it's not a very good interface as that means it can break scripts called within that environment and that rely on non-POSIX behaviour of some utilities, but that's beside the point being made here). If one wants a POSIX shell, they can use #! /bin/sh - Or: #! /usr/bin/env bash set -o posix if they can't rely on /bin/sh being a POSIX shell. But that should not affect the behaviour of all other utilities called within the script. Without "-a", it's OK as the $POSIXLY_CORRECT variable is not exported (it's not very useful that bash sets it (especially considering it's not documented), but at least it's harmless). -- Steohane