From: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>
Subject: [OSSTEST PATCH 3/3] Shell fixup: Use bash in posix mode
Date: Thu, 24 Sep 2015 18:29:22 +0100 [thread overview]
Message-ID: <1443115762-7046-3-git-send-email-ian.jackson@eu.citrix.com> (raw)
In-Reply-To: <1443115762-7046-1-git-send-email-ian.jackson@eu.citrix.com>
When bash is started as /bin/sh it run in posix compatibility mode.
But when invoked as /bin/bash it does some things ... differently.
Most notably:
Subshells spawned to execute command substitutions inherit the
value of the -e option from the parent shell. When not in posix
mode, bash clears the -e option in such subshells.
It is a mystery why anyone thought the `non-posix' behaviour was
desirable. One effect in practice is that osstest's cr-daily-branch
can blunder on if one of its version fetches fails.
AFAICT the only documented way to get rid of this anomalous behaviour
is to switch bash to posix mode. I have read through the wheezy
bash(1) manpage and searched for posix, and the following behavioural
differences are described:
* Differences in interative startup (not relevant to us).
* Minor (irrelevant) differences in which startup files are read
during noninteractive startup. (Eg, BASH_ENV not honoured.)
* Differences to the parsing of invocations of `time'
* `test a == b' may be unsupported (but it's wrong and we say `=')
* -e not inherited by some subshells (this is what I am trying to fix)
* `.' and `source' do not search the cwd.
* `set' with no arguments does not print shell functions etc.
So I think, with the previous patch, that these changes are all
desirable or at least harmless.
I have not added `set -o posix' to shell script fragments invoked by
various scripts (eg Perl and Tcl scripts). Those scripts might be
processed by bash if /bin/sh is bash, but when is invoked as sh it
runs in posix mode anyway.
I have done some ad-hoc testing but it seems like much of this is
difficult to test. I suggest we push it at a time when we can keep a
close eye on the behaviour.
Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
---
ap-fetch-version | 2 +-
ap-fetch-version-baseline | 2 +-
ap-fetch-version-baseline-late | 2 +-
ap-fetch-version-old | 2 +-
ap-print-url | 2 +-
ap-push | 2 +-
ap-qemu-revision | 2 +-
ap-qemu-url | 2 +-
cr-all-branch-statuses | 2 +-
cr-daily-branch | 2 +-
cr-for-branches | 2 +-
cr-try-bisect | 2 +-
cr-try-bisect-adhoc | 2 +-
cri-getprevxenbranch | 2 +-
invoke-daemon | 4 +++-
make-distros-flight | 2 +-
make-flight | 2 +-
mg-adjust-flight-makexrefs | 2 +-
mg-all-branch-statuses | 2 +-
mg-branch-setup | 2 +-
mg-cpu-microcode-update | 2 +-
mg-debian-installer-update | 2 +-
mg-debian-installer-update-all | 2 +-
mg-execute-flight | 2 +-
mg-pxe-loader-update | 2 +-
mg-update-live | 2 +-
sa-forget-flight | 2 +-
sa-init-db | 2 +-
sg-hg-heads | 2 +-
standalone | 2 +-
standalone-generate-dump-flight-runvars | 2 +-
standalone-reset | 2 +-
32 files changed, 34 insertions(+), 32 deletions(-)
diff --git a/ap-fetch-version b/ap-fetch-version
index 086aa62..6fa7588 100755
--- a/ap-fetch-version
+++ b/ap-fetch-version
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
branch=$1
. ./cri-lock-repos
diff --git a/ap-fetch-version-baseline b/ap-fetch-version-baseline
index 8889d1e..2e42508 100755
--- a/ap-fetch-version-baseline
+++ b/ap-fetch-version-baseline
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
branch=$1
diff --git a/ap-fetch-version-baseline-late b/ap-fetch-version-baseline-late
index 3db443d..9856ec9 100755
--- a/ap-fetch-version-baseline-late
+++ b/ap-fetch-version-baseline-late
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
branch=$1
new=$2
diff --git a/ap-fetch-version-old b/ap-fetch-version-old
index 9d5487a..66d51f8 100755
--- a/ap-fetch-version-old
+++ b/ap-fetch-version-old
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
branch=$1
. ./cri-lock-repos
diff --git a/ap-print-url b/ap-print-url
index 1b178c7..4088852 100755
--- a/ap-print-url
+++ b/ap-print-url
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
branch=$1
. ./cri-lock-repos
diff --git a/ap-push b/ap-push
index ea21887..d2195f2 100755
--- a/ap-push
+++ b/ap-push
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -ex
+set -ex -o posix
branch=$1
revision=$2
diff --git a/ap-qemu-revision b/ap-qemu-revision
index de105ca..d08cffe 100755
--- a/ap-qemu-revision
+++ b/ap-qemu-revision
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
xenbranch=$1
xenrevision=$2
diff --git a/ap-qemu-url b/ap-qemu-url
index 6ed704a..61598f6 100755
--- a/ap-qemu-url
+++ b/ap-qemu-url
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
xenbranch=$1
diff --git a/cr-all-branch-statuses b/cr-all-branch-statuses
index f4ed46e..46028ba 100755
--- a/cr-all-branch-statuses
+++ b/cr-all-branch-statuses
@@ -16,7 +16,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -ex
+set -ex -o posix
. ./cri-args-hostlists
branch=$1; shift
diff --git a/cr-daily-branch b/cr-daily-branch
index 06f4b38..c7cc33b 100755
--- a/cr-daily-branch
+++ b/cr-daily-branch
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -ex
+set -ex -o posix
. ./cri-args-hostlists
. ./ap-common
diff --git a/cr-for-branches b/cr-for-branches
index 8d5748b..757045d 100755
--- a/cr-for-branches
+++ b/cr-for-branches
@@ -20,7 +20,7 @@
-set -e
+set -e -o posix
export FOR_LOGFILE="$*"
diff --git a/cr-try-bisect b/cr-try-bisect
index 06c4940..2a5fe09 100755
--- a/cr-try-bisect
+++ b/cr-try-bisect
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -ex
+set -ex -o posix
. ./cri-bisect
. ./cri-args-hostlists
diff --git a/cr-try-bisect-adhoc b/cr-try-bisect-adhoc
index 4ff8b8c..5f8b7e1 100755
--- a/cr-try-bisect-adhoc
+++ b/cr-try-bisect-adhoc
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -ex
+set -ex -o posix
export OSSTEST_BLESSING=adhoc
diff --git a/cri-getprevxenbranch b/cri-getprevxenbranch
index 308b0c7..a70138e 100755
--- a/cri-getprevxenbranch
+++ b/cri-getprevxenbranch
@@ -1,6 +1,6 @@
#!/bin/bash
-set -e
+set -e -o posix
xenbranch=$1
p=
diff --git a/invoke-daemon b/invoke-daemon
index 5fab1da..ad1434a 100755
--- a/invoke-daemon
+++ b/invoke-daemon
@@ -1,4 +1,4 @@
-#!/bin/bash -e
+#!/bin/bash
# This is part of "osstest", an automated testing framework for Xen.
# Copyright (C) 2009-2013 Citrix Inc.
@@ -16,6 +16,8 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+set -e -o posix
+
if [ -e $HOME/.xen-osstest/settings ]; then
source $HOME/.xen-osstest/settings
fi
diff --git a/make-distros-flight b/make-distros-flight
index 697a171..90e28c3 100755
--- a/make-distros-flight
+++ b/make-distros-flight
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
branch=$1
xenbranch=$2
diff --git a/make-flight b/make-flight
index 8dc4e64..8c75a9c 100755
--- a/make-flight
+++ b/make-flight
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
branch=$1
xenbranch=$2
diff --git a/mg-adjust-flight-makexrefs b/mg-adjust-flight-makexrefs
index ebbac15..ec555bc 100755
--- a/mg-adjust-flight-makexrefs
+++ b/mg-adjust-flight-makexrefs
@@ -22,7 +22,7 @@
# passing --debug in REF-CONDS too)
# -n Dry run: do not actually run cs-adjust-flight
-set -e
+set -e -o posix
exec 3>/dev/null
verbose=''
diff --git a/mg-all-branch-statuses b/mg-all-branch-statuses
index 74dc09a..d3e437f 100755
--- a/mg-all-branch-statuses
+++ b/mg-all-branch-statuses
@@ -25,7 +25,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
. ./cri-common
diff --git a/mg-branch-setup b/mg-branch-setup
index f8bcb2e..6a9bd3f 100755
--- a/mg-branch-setup
+++ b/mg-branch-setup
@@ -15,7 +15,7 @@
# - create any input/output tree on xenbits
# - run any test flights (obviously)
-set -e
+set -e -o posix
fail () { echo >&2 "$*"; exit 1; }
badusage () { fail 'bad usage'; }
diff --git a/mg-cpu-microcode-update b/mg-cpu-microcode-update
index 4d51dfb..1032025 100755
--- a/mg-cpu-microcode-update
+++ b/mg-cpu-microcode-update
@@ -1,6 +1,6 @@
#!/bin/bash
-set -e
+set -e -o posix
. ./cri-getconfig
. ./mgi-common
diff --git a/mg-debian-installer-update b/mg-debian-installer-update
index 6070b8a..7e3fb20 100755
--- a/mg-debian-installer-update
+++ b/mg-debian-installer-update
@@ -19,7 +19,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
. ./cri-getconfig
. ./mgi-common
diff --git a/mg-debian-installer-update-all b/mg-debian-installer-update-all
index 1bbaef7..4e76a69 100755
--- a/mg-debian-installer-update-all
+++ b/mg-debian-installer-update-all
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
. ./cri-getconfig
diff --git a/mg-execute-flight b/mg-execute-flight
index 0d8c792..8b2c21c 100755
--- a/mg-execute-flight
+++ b/mg-execute-flight
@@ -29,7 +29,7 @@ usage () { cat <<END
END
}
-set -e
+set -e -o posix
publish=false
diff --git a/mg-pxe-loader-update b/mg-pxe-loader-update
index 9774350..e0e347d 100755
--- a/mg-pxe-loader-update
+++ b/mg-pxe-loader-update
@@ -21,7 +21,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
. ./cri-getconfig
. ./mgi-common
diff --git a/mg-update-live b/mg-update-live
index f1d24cd..3ff7ffa 100755
--- a/mg-update-live
+++ b/mg-update-live
@@ -22,7 +22,7 @@
# cd ~osstest
# for f in branches/*.git; do ./update-live 3c464fbf8a05b24f4afb7e58bcf4ae77fbb7ad0c $f; done
-set -e
+set -e -o posix
bad="$1"
dir="$2"
diff --git a/sa-forget-flight b/sa-forget-flight
index 8b005f1..1c3ecb2 100755
--- a/sa-forget-flight
+++ b/sa-forget-flight
@@ -16,7 +16,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
usage(){
cat <<END
diff --git a/sa-init-db b/sa-init-db
index 37ab4be..bd9aa4a 100755
--- a/sa-init-db
+++ b/sa-init-db
@@ -16,7 +16,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
usage(){
cat <<END
diff --git a/sg-hg-heads b/sg-hg-heads
index 41ec734..b2dd601 100755
--- a/sg-hg-heads
+++ b/sg-hg-heads
@@ -21,7 +21,7 @@
# where COMMAND ARGS SCRIPT
# runs shell script SCRIPT in an appropriate directory and place
-set -e
+set -e -o posix
result=`"$@" 'hg heads --template '\''{node|short}\n'\'''`
lines=`printf '%s\n' "$result" | wc -l`
diff --git a/standalone b/standalone
index 9383d72..168a46c 100755
--- a/standalone
+++ b/standalone
@@ -1,6 +1,6 @@
#!/bin/bash
-set -e
+set -e -o posix
usage() {
cat >&2 <<EOF
diff --git a/standalone-generate-dump-flight-runvars b/standalone-generate-dump-flight-runvars
index da3c0f8..d113927 100755
--- a/standalone-generate-dump-flight-runvars
+++ b/standalone-generate-dump-flight-runvars
@@ -24,7 +24,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
set -o pipefail
diff --git a/standalone-reset b/standalone-reset
index 0a69915..e58ba68 100755
--- a/standalone-reset
+++ b/standalone-reset
@@ -16,7 +16,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set -e
+set -e -o posix
usage(){
cat <<END
--
1.7.10.4
next prev parent reply other threads:[~2015-09-24 17:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-24 17:29 [OSSTEST PATCH 1/3] Remove obsolete file "test.sched" Ian Jackson
2015-09-24 17:29 ` [OSSTEST PATCH 2/3] Shell fixup: Make all invocations of `.' (`source') use ./ Ian Jackson
2015-09-25 8:40 ` Ian Campbell
2015-09-24 17:29 ` Ian Jackson [this message]
2015-09-25 8:47 ` [OSSTEST PATCH 3/3] Shell fixup: Use bash in posix mode Ian Campbell
2015-09-25 8:37 ` [OSSTEST PATCH 1/3] Remove obsolete file "test.sched" Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1443115762-7046-3-git-send-email-ian.jackson@eu.citrix.com \
--to=ian.jackson@eu.citrix.com \
--cc=ian.campbell@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).