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

Dan Prince dprince at redhat.com
Mon Apr 14 17:35:10 UTC 2014



----- Original Message -----
> From: "Ben Nemec" <openstack at nemebean.com>
> To: "OpenStack Development Mailing List (not for usage questions)" <openstack-dev at lists.openstack.org>
> Sent: Monday, April 14, 2014 12:26:17 PM
> Subject: [openstack-dev] [tripleo] /bin/bash vs. /bin/sh
> 
> 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. 

This sounds like the easiest (and possibly best) solution here to me.

> 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 see the fact that DIB uses /bin/bash as mostly an implementation detail. So long as we keep this internal to DIB it shouldn't matter what shell we use right? And on that note why not just make things simpler and require and use /bin/bash?

The only exception would be for scripts that might need to be sourced by end users in their own environment shells. And for those we can certainly try to make things as generic as possible.

> 
> Thanks.
> 
> -Ben
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> 



More information about the OpenStack-dev mailing list