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

Re: [PATCH] test-lib.sh: work around ksh's trap shortcomings

From
Brandon Casey <casey@nrlssc.navy.mil>
Date
Aug 20, 2008, 00:19 UTC
Message-ID
<nEEUmh6BVMDYtwf1vENCYuaLiFUWKW_dbgPP__ECl3s@cipher.nrlssc.navy.mil>
In-Reply-To
<cqiOMMbzSSjqZoLDEa5uscl2d0D71PrGu2TpSOULLuV5nTVnEEWCzQ@cipher.nrlssc.navy.mil>
Brandon Casey wrote:
Show 7 quoted lines
> Junio C Hamano wrote:
>> Your alias test_done that calls function test_done look ugly and confusing
>> beyond words.  Perhaps test_done() can instead set a global variable and
>> die() can notice it instead, like this?  I haven't bothered to change the
>> other "trap - exit" but I think you got the idea...
> 
> Yes that works and is much clearer. Tested on solaris and irix.
I spoke too soon. Failing tests do not terminate the testing.

ksh does not place the exit status of the shell in $? or provide it as an argument to the trap function. Possibly the status of the 'exit' command is provided instead?

$ cat test.sh #!/bin/sh

die () {
    status=$?
    echo >&2 "die status: $status"
    exit $status
}
trap 'die' 0

echo "I am dying" exit 1

###### END TEST SCRIPT ######

linux $ /bin/sh test.sh I am dying die status: 1 linux $ echo $? 1

linux $ /usr/bin/ksh test.sh I am dying die status: 1 linux $ echo $? 1

IRIX $ /bin/ksh test.sh I am dying die status: 0 IRIX $ echo $? 0

SunOS $ /usr/xpg4/bin/sh test.sh I am dying die status: 0 SunOS $ echo $? 0

Ah, no, it looks like the status of the command executed immediately before exit is what the trap has access to in $?. Adding a call to false before exit in the above script causes the korn scripts to exit with status 1 on IRIX and SunOS.

#!/bin/sh
die () {
    status=$?
    echo >&2 "die status: $status"
    exit $status
}
trap 'die' 0

echo "I am dying" false exit 1

-brandon
Previous: Brandon CaseyNext: Mike Ralphson
Message 15 of 28 in “[FYI] How I compile on IRIX 6.5 with the MIPSpro compiler and ksh”
  1. Brandon CaseyAug 18, 2008
  2. Makefile: add section for SGI IRIXBrandon Casey, Aug 18, 2008
  3. git-compat-util.h: adjust for SGI IRIX 6.5Brandon Casey, Aug 18, 2008
  4. unpack-trees.c: work around run-time array initialization flaw on IRIX 6.5Brandon Casey, Aug 18, 2008
  5. templates/Makefile: work around SGI install which assumes / if ROOT not definedBrandon Casey, Aug 18, 2008
  6. Junio C HamanoAug 18, 2008
  7. Brandon CaseyAug 19, 2008
  8. templates/Makefile: install is unnecessary, just use mkdir -pBrandon Casey, Aug 22, 2008
  9. test-lib.sh: work around ksh's trap shortcomingsBrandon Casey, Aug 18, 2008
  10. Junio C HamanoAug 18, 2008
  11. Brandon CaseyAug 19, 2008
  12. Junio C HamanoAug 19, 2008
  13. Brandon CaseyAug 19, 2008
  14. Brandon CaseyAug 19, 2008
  15. Brandon CaseyAug 20, 2008
  16. Mike RalphsonAug 20, 2008
  17. t1002-read-tree-m-u-2way.sh: use 'git diff -U0' rather than 'diff -U0'Brandon Casey, Aug 18, 2008
  18. t9301-fast-export.sh: don't unset config variable while we're skipping test 4Brandon Casey, Aug 18, 2008
  19. Junio C HamanoAug 19, 2008
  20. Brandon CaseyAug 19, 2008
  21. t9301-fast-export: move unset of config variable into its own test functionBrandon Casey, Aug 22, 2008
  22. Junio C HamanoAug 22, 2008
  23. Junio C HamanoAug 22, 2008
  24. Johannes SixtAug 22, 2008
  25. Junio C HamanoAug 22, 2008
  26. Brandon CaseyAug 18, 2008
  27. Boyd Lynn GerberAug 19, 2008
  28. Brandon CaseyAug 19, 2008

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.