Right now, doshell() with -c always falls down to fail(), which SIGTERMs the process group, so the exit code is always 143: $ script -ec 'echo a; exit 12' Script started, output file is typescript a Script done, output file is typescript $ echo $? 143 Instead, handle non-error returns from system(3) --- christos@ has applied a core subset of my original patches (thanks!), but not the system(3) replacement bit, which was required to get good -ec behaviour: this is an alternative that preserves system(3), but makes it so script -ec 'exit 32' exits 32, not 143 script.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/script.c b/script.c index d7ec6c5..d0dd30c 100644 --- a/script.c +++ b/script.c @@ -295,8 +295,14 @@ doshell(const char *command) execl(shell, shell, "-i", NULL); warn("execl `%s'", shell); } else { - if (system(command) == -1) - warn("system `%s'", command); + int ret = system(command); + if (ret != -1) { + if (WIFEXITED(ret)) + _exit(WEXITSTATUS(ret)); + else + _exit(128 + WTERMSIG(ret)); + } + warn("system `%s'", command); } fail(); -- 2.30.2
Attachment:
signature.asc
Description: PGP signature