From 4fc5f4cac951233fae6388ea43b3a1dceac82ac8 Mon Sep 17 00:00:00 2001 From: obrien Date: Thu, 16 Sep 2010 22:31:03 +0000 Subject: [PATCH] + Add the SCRIPT environmental variable to the sub-shell. Its value is the name of the typescript file. + Add the 'command' argument (if supplied on the command line) to the typescript file. This creates a more complete typescript when invoked this way - more equal to invoking script without supplying the 'command' argument. --- usr.bin/script/script.1 | 13 +++++++++++++ usr.bin/script/script.c | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/usr.bin/script/script.1 b/usr.bin/script/script.1 index 1c93b3e48a15..08ad643d5774 100644 --- a/usr.bin/script/script.1 +++ b/usr.bin/script/script.1 @@ -117,6 +117,19 @@ The results are meant to emulate a hardcopy terminal, not an addressable one. The following environment variable is utilized by .Nm : .Bl -tag -width SHELL +.It Ev SCRIPT +The +.Ev SCRIPT +environment variable is added to the sub-shell. +If +.Ev SCRIPT +already existed in the users environment, +its value is overwritten within the sub-shell. +The value of +.Ev SCRIPT +is the name of the +.Ar typescript +file. .It Ev SHELL If the variable .Ev SHELL diff --git a/usr.bin/script/script.c b/usr.bin/script/script.c index 64ca486d0630..e8fa922839f3 100644 --- a/usr.bin/script/script.c +++ b/usr.bin/script/script.c @@ -235,14 +235,21 @@ static void doshell(char **av) { const char *shell; + int k; shell = getenv("SHELL"); if (shell == NULL) shell = _PATH_BSHELL; + if (av[0]) + for (k = 0 ; av[k] ; ++k) + fprintf(fscript, "%s%s", k ? " " : "", av[k]); + fprintf(fscript, "\r\n"); + (void)close(master); (void)fclose(fscript); login_tty(slave); + setenv("SCRIPT", fname, 1); if (av[0]) { execvp(av[0], av); warn("%s", av[0]);