git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Portability of git shell scripts?

From
Jeff King <peff@peff.net>
Date
May 4, 2016, 21:20 UTC
Message-ID
<20160504212028.GG21259@sigill.intra.peff.net>
In-Reply-To
<CALR6jEh5dAcnqiyo4kXkj+8imfQQd0nT=baPOW_qbJpJwmFsyw@mail.gmail.com>
On Wed, May 04, 2016 at 08:17:38PM +0200, Armin Kunaschik wrote:
> I'm trying to compile/test/use git 2.8.2 on AIX 6.1 with no bash available.
> /bin/sh is a hard link to /bin/ksh which is a ksh88, a posix shell.
> Is this supposed to work?

We aim for a practical subset of Bourne shells, including bash, dash, ash, ksh, etc. There's at least one Bourne-ish shell known not to work, which is Solaris /bin/sh[1]. POSIX is usually a good guide, but we aim for practical portability more than adhering strictly to the standards document.

I've tested with mksh in the past (though it's possible that we've introduced a regression since then). But I think we've run into problems with ksh93[2]. I don't know about ksh88, or what construct it doesn't like. It may or may not be easy to work around.

Show 5 quoted lines
> As an example: make test fails on nearly every t34* test and on tests
> which contain rebase.
> The installation of bash (and manually changing the shebang to
> /bin/bash) "fixes" all rebase test failures. So obviously git-rebase
> is not portable at some point.

Right. Any modern-ish Bourne shell will do, so moving to bash is one way to fix it.

> Does it make any sense to put work into making these scripts portable,
> that is, work with posix shells?

Maybe. :) If you can find what it is that ksh88 is unhappy with, we can see how painful it is to adapt to. But given my looking into ksh93 in [2], I suspect it will be easier to just use a more modern shell.

> And, as last resort, is it possible to configure git use bash in some
> or all shell scripts?
You can set SHELL_PATH in your config.mak file.
-Peff
[1] Solaris /bin/sh doesn't even understand $(), so we declared it as
    hopeless long ago. I think most people just replace it with bash,
    but I suspect /usr/xpg6/bin/sh probably works, too.
[2] http://thread.gmane.org/gmane.comp.version-control.git/268657/focus=268666
Previous: Torsten BögershausenNext: Armin Kunaschik
Message 3 of 5 in “Portability of git shell scripts?”
  1. Armin KunaschikMay 4, 2016
  2. Torsten BögershausenMay 4, 2016
  3. Jeff KingMay 4, 2016
  4. Armin KunaschikMay 6, 2016
  5. Jeff KingMay 7, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.