tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: odd script(1) behavior - script bug, man bug, ?



On Tue, 16 Dec 2025, Greg Troxel wrote:

In running bup regression tests, it basically does


 script -q -c "/path/to/bup/under/test some bup args" /dev/null

to ensure that the program is tested with a tty as input, separately
from just running it.

I have been running  the test suite "< /dev/null > CHECK.foo 2&1" more
or less.

This results in the top-level script exiting because no characters are
available on stdin, even though the program is still running.


This patch makes script behave like the Linux one (which I think is the less
confusing behaviour):

```
diff -urN a/src/usr.bin/script/script.c b/src/usr.bin/script/script.c
--- a/src/usr.bin/script/script.c	2023-05-09 15:43:39.000000000 +0000
+++ b/src/usr.bin/script/script.c	2025-12-17 09:10:33.002285265 +0000
@@ -82,7 +82,6 @@
 static const char *fname;

 static volatile	sig_atomic_t die = 0;	/* exit if 1 */
-static int	cstat = EXIT_SUCCESS;	/* cmd. exit status */
 static int	eflag;
 static int	isterm;
 static struct	termios tt;
@@ -212,7 +211,7 @@
 			record(fscript, ibuf, cc, 'i');
 		(void)write(master, ibuf, cc);
 	}
-	done(cstat);
+	finish(0);
 }

 /**
@@ -293,7 +292,7 @@
 		if (flush)
 			(void)fflush(fscript);
 	}
-	done(cstat);
+	finish(0);
 }

 static void
@@ -358,7 +357,7 @@
 		if (!quiet)
 			(void)printf("Script done, output file is %s\n", fname);
 	}
-	exit(status);
+	_exit(status);
 }

 static void
```

It also makes the `-e' option work as intended.

-RVP


Home | Main Index | Thread Index | Old Index