On Tue, Jul 3, 2012 at 10:51 AM, ольга крыжановская < [email protected]> wrote:
> Clark, you can always use a nameref to pass extra values down to the > caller, like an extra message/return code etc Yes I know that. Since David is planning to do some fixing about $? in 93v it would be good if that can be fixed in a perfect way. > The exit codes of > functions and scripts are *limited* (by design of the POSIX standard > and practical considerations) and should not be used in an attempt to > return more complex things beyond a) small range numeric value and b) > signal number if some thing was aborted by a signal. Also bash's use > of 128+signum is not very good, it has caused trouble for scripts in > True. > the past when a dynamically calculated exit code spilled over beyond > 128 (bash's internal logic then tries to do some thing with signals > which were not even send in the first place --> weired behaviour). > > Olga > > On Tue, Jul 3, 2012 at 4:08 AM, Clark WANG <[email protected]> wrote: > > On Mon, Jul 2, 2012 at 9:16 PM, David Korn <[email protected]> wrote: > >> > >> cc: [email protected] > >> Subject: Re: [ast-users] [ksh93] How to return $? from a function when > $? > >> > 256 > >> -------- > >> > >> > For example, following code is very common in scripts: > >> > > >> > ### CODE BEGIN ### > >> > function debug > >> > { > >> > return > >> > } > >> > > >> > function runcmd > >> > { > >> > typeset cmd=$1 > >> > typeset rc > >> > > >> > debug "+++ $cmd" > >> > eval "$cmd" > >> > rc=$? > >> > if (( rc )); then > >> > debug "+++ $cmd failed with $rc" > >> > else > >> > debug "+++ $cmd succeeded" > >> > fi > >> > > >> > return $rc > >> > } > >> > > >> > runcmd '/usr/bin/sleep 15' > >> > echo $? > >> > ### CODE END ### > >> > > >> > The problem is when the command is killed by a signal, we cannot > return > >> > the > >> > correct $? (> 256) from the runcmd() function. Bash does not has this > >> > problem since $? is equal to 128+signal when a command is killed. > >> > > >> > (attachment 1 18/1063 text/html "1.att") > >> > > >> > >> This is a bug that is already on my list for ksh93v. > >> > >> The problem with using exit codes of 128+signo (as the Bourne shell > did), > >> is that users can use these exit normal codes. For historical reasons > the > >> standard allows 128+signo, bug 256+signo is safer. > >> > >> User who do 'exit 267' must get 11 since only the lower eight bits > >> are valid. > >> > >> However, the shell should treat exit $? specially since it means > > > > > > I don't think it's enough to only treat $? (for both exit and return) > > specially. Like in my example, it's very common to save $? in a tmp var > and > > then return (or exit) it later. > > > >> > >> propogate an exit code. For a program it means exit with > >> this signal by sending the signal to the current process. > >> > >> For a function, it has to preserve the 256. The key is to > >> differentiate > >> exit 267 > >> and > >> exit $? > >> > >> The former will become ($?&0xff) the latter, $?. > >> > >> David Korn > >> [email protected] > > >
_______________________________________________ ast-users mailing list [email protected] https://mailman.research.att.com/mailman/listinfo/ast-users
