Herbert Xu wrote: > sh -c 'trap "exec nosuchfile" EXIT; exit 3'; echo $? > > This makes dash exit with 127 instead of 3 as it does now. > > AFAIK the wording of POSIX is such that we should return 3, however, > it does seem that every other shell exits with 127.
On 'exec': "If exec is specified with command, it shall replace the shell with command without creating a new process." (1) "If command is specified, exec shall not return to the shell; rather, the exit status of the process shall be the exit status of the program implementing command, which overlaid the shell. If command is not found, the exit status shall be 127. If command is found, but it is not an executable utility, the exit status shall be 126. If a redirection error occurs (see Consequences of Shell Errors ), the shell shall exit with a value in the range 1-125. Otherwise, exec shall return a zero exit status." (2) On 'exit': "... A trap on EXIT shall be executed before the shell terminates, except when the exit utility is invoked in that trap itself, in which case the shell shall exit immediately." (3) "The exit status [of the exit utility -jrn] shall be n, if specified. Otherwise, the value shall be the exit value of the last command executed, or zero if no command was executed. When exit is executed in a trap action, the last command is considered to be the command that executed immediately preceding the trap action." (4) The passage (3) seems to mean that "exit" triggers an EXIT trap (except, to avoid having to deal with recursion, when the "exit" occurs within an EXIT trap). Then the exec builtin is invoked, resulting (according to (2)) in an exit(127) without returning to the shell. So I think the proposed behavior fits the spec. Regards, Jonathan -- To unsubscribe from this list: send the line "unsubscribe dash" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html