summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2010-09-16 22:31:03 +0000
committerobrien <obrien@FreeBSD.org>2010-09-16 22:31:03 +0000
commit4fc5f4cac951233fae6388ea43b3a1dceac82ac8 (patch)
treeb08e7a6cf36a91af27e1012d13c79487e54130ff
parent9bbf98ec1e321950c92d48752d6cd1446e57470b (diff)
downloadFreeBSD-src-4fc5f4cac951233fae6388ea43b3a1dceac82ac8.zip
FreeBSD-src-4fc5f4cac951233fae6388ea43b3a1dceac82ac8.tar.gz
+ 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.
-rw-r--r--usr.bin/script/script.113
-rw-r--r--usr.bin/script/script.c7
2 files changed, 20 insertions, 0 deletions
diff --git a/usr.bin/script/script.1 b/usr.bin/script/script.1
index 1c93b3e..08ad643 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 64ca486..e8fa922 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]);
OpenPOWER on IntegriCloud