[openstack-dev] [tripleo] /bin/bash vs. /bin/sh

Daniel P. Berrange berrange at redhat.com
Tue Apr 15 08:14:46 UTC 2014


On Mon, Apr 14, 2014 at 11:26:17AM -0500, Ben Nemec wrote:
> tldr: I propose we use bash explicitly for all diskimage-builder
> scripts (at least for the short-term - see details below).
> 
> This is something that was raised on my linting changes to enable
> set -o pipefail.  That is a bash-ism, so it could break in the
> diskimage-builder scripts that are run using /bin/sh.  Two possible
> fixes for that: switch to /bin/bash, or don't use -o pipefail
> 
> But I think this raises a bigger question - does diskimage-builder
> require bash?  If so, I think we should just add a rule to enforce
> that /bin/bash is the shell used for everything.  I know we have a
> bunch of bash-isms in the code already, so at least in the
> short-term I think this is probably the way to go, so we can get the
> benefits of things like -o pipefail and lose the ambiguity we have
> right now.  For reference, a quick grep of the diskimage-builder
> source shows we have 150 scripts using bash explicitly and only 24
> that are plain sh, so making the code truly shell-agnostic is likely
> to be a significant amount of work.
> 
> In the long run it might be nice to have cross-shell compatibility,
> but if we're going to do that I think we need a couple of things: 1)
> Someone to do the work (I don't have a particular need to run dib in
> not-bash, so I'm not signing up for that :-) 2) Testing in other
> shells - obviously just changing /bin/bash to /bin/sh doesn't mean
> we actually support anything but bash.  We really need to be gating
> on other shells if we're going to make a significant effort to
> support them.  It's not good to ask reviewers to try to catch every
> bash-ism proposed in a change.  This also relates to some of the
> unit testing work that is going on right now too - if we had better
> unit test coverage of the scripts we would be able to do this more
> easily.
> 
> Thoughts?

I supose that rewriting the code to be in Python is out of the
question ?  IMHO shell is just a terrible language for doing any
program that is remotely complicated (ie longer than 10 lines of
shell), for the reasons you are unfortunately illustrating here,
among many others.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|



More information about the OpenStack-dev mailing list