Hi,
I've a report of a regression for ksh scripts like this:
------------------------------------------------------------------
#! /usr/bin/ksh
func1()
{
print "func1's \$0 = $0 ; \$* = $*"
}
function func2
{
func1 "$*"
print "func2's \$0 = $0 ; \$* = $*"
}
func2 "$*"
print "main's \$0 = $0 ; \$* = $*"
------------------------------------------------------------------
for ksh 93t+ 2010-06-21 the broken output is like this
boole:/ # ksh tmp/x 1 2 3
func1's $0 = func1 ; $* = 1 2 3 <==== $0 here should be
func2's $0 = func2 ; $* = 1 2 3
main's $0 = tmp/x ; $* = 1 2 3
whereas for ksh 93t+ 2009-01-20 the correct output is
boole:/ # echo ${KSH_VERSION}
Version JM 93t+ 2009-01-20
boole:/ # ksh tmp/x 1 2 3
func1's $0 = func2 ; $* = 1 2 3
func2's $0 = func2 ; $* = 1 2 3
main's $0 = tmp/x ; $* = 1 2 3
please note the first line is different. One comment from
the report:
| > My question is: is this a problem, please read my comment #1
| > AFAICS this is the intended behaviour.
|
| Yes, this is a problem for GPFS internal tracing of function calls in shell
| scripts. Because of this bug, the trace data does not show the correct
| function name which called the posix TRACE function. This makes it very
| difficult to debug a problem.
|
| The behaviors of the posix function are mentioned in chapter 4 of Learning the
| Korn Shell, 2nd Edition book.
|
| POSIX functions
|
| As mentioned earlier, functions defined using the POSIX syntax obey POSIX
| semantics and not Korn shell semantics:
|
| functname () {
| shell commands}
|
| The best way to understand this is to think of a POSIX function as being like
a
| dot script. Actions within the body of the function affect all the state of
the
| current script. In contrast, Korn shell functions have much less shared state
| with the parent shell, although they are not identical to totally separate
| scripts.
|
| The technical details follow; they include information that we haven't covered
| yet. So come back and reread this section after you've learned about the
| typeset command in Chapter 6 and about traps in Chapter 8.
|
| * POSIX functions share variables with the parent script. Korn shell
| functions can have their own local variables.
|
| * POSIX functions share traps with the parent script. Korn shell functions
| can have their own local traps.
|
| * POSIX functions cannot be recursive (call themselves).[5] Korn shell
| functions can.
|
| [5] This is a restriction imposed by the Korn shell, not by the POSIX
| standard.
|
| * When a POSIX function is run, $0 is not changed to the name of the
| function.
Werner
--
"Having a smoking section in a restaurant is like having
a peeing section in a swimming pool." -- Edward Burr
_______________________________________________
ast-developers mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-developers