From: Karel Zak Date: Fri, 12 Apr 2019 12:14:55 +0000 (+0200) Subject: script: add --log-in X-Git-Tag: v2.35-rc1~170 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=70062aad13552c9508b73f61c6dd157e61603a99;p=thirdparty%2Futil-linux.git script: add --log-in Let's allow to log input independently on output. So it's possible to script --log-in infile : logs only input script --log-out outfile : logs only output script --log-out outfile --log-in infile : logs both to separated files Signed-off-by: Karel Zak --- diff --git a/term-utils/script.1 b/term-utils/script.1 index 439e47c8e2..5d822d498d 100644 --- a/term-utils/script.1 +++ b/term-utils/script.1 @@ -87,9 +87,17 @@ being done using `cat foo'. Allow the default output destination, i.e. the typescript file, to be a hard or symbolic link. The command will follow a symbolic link. .TP +\fB\-I\fR, \fB\-\-log\-in\fR \fIfile\fR +Log input to the \fIfile\fR. The log output is disabled if only \fB\-\-log\-in\fR +specified. +.sp +Use this logging functionality carefully as it logs all input, including input +when terminal has disabled echo flag (for example it log passwords in the input). +.TP \fB\-O\fR, \fB\-\-log\-out\fR \fIfile\fR -Log output to the \fIfile\fR. The default is to log the file with name 'typescript' -if the option is not given. +Log output to the \fIfile\fR. The default is to log output to the file with +name 'typescript' if the option \fB\-\-log\-out\fR or \fB\-\-log\-in\fR is not +given. The log output is disabled if only \fB\-\-log\-in\fR specified. .TP \fB\-T\fR, \fB\-\-log\-timing\fR \fIfile\fR Log timing information to the \fIfile\fR. diff --git a/term-utils/script.c b/term-utils/script.c index a2a3594412..9b5aa778d8 100644 --- a/term-utils/script.c +++ b/term-utils/script.c @@ -189,6 +189,7 @@ static void __attribute__((__noreturn__)) usage(void) fputs(_("Make a typescript of a terminal session.\n"), out); fputs(USAGE_OPTIONS, out); + fputs(_(" -I, --log-in log stdin to file\n"), out); fputs(_(" -O, --log-out log stdout to file (default)\n"), out); fputs(_(" -T, --log-timing log timing information to file\n"), out); fputs(_(" -a, --append append the output\n"), out); @@ -887,7 +888,7 @@ int main(int argc, char **argv) .poll_timeout = -1 }; int ch; - const char *typescript = DEFAULT_TYPESCRIPT_FILENAME; + const char *outfile = NULL, *infile = NULL; const char *timingfile = NULL; enum { FORCE_OPTION = CHAR_MAX + 1 }; @@ -898,6 +899,7 @@ int main(int argc, char **argv) {"return", no_argument, NULL, 'e'}, {"flush", no_argument, NULL, 'f'}, {"force", no_argument, NULL, FORCE_OPTION,}, + {"log-in", required_argument, NULL, 'I'}, {"log-out", required_argument, NULL, 'O'}, {"log-timing", required_argument, NULL, 'T'}, {"output-limit", required_argument, NULL, 'o'}, @@ -927,7 +929,7 @@ int main(int argc, char **argv) script_init_debug(); - while ((ch = getopt_long(argc, argv, "ac:efO:o:qT:t::Vh", longopts, NULL)) != -1) { + while ((ch = getopt_long(argc, argv, "ac:efI:O:o:qT:t::Vh", longopts, NULL)) != -1) { err_exclusive_options(ch, longopts, excl, excl_st); @@ -947,8 +949,13 @@ int main(int argc, char **argv) case FORCE_OPTION: ctl.force = 1; break; + case 'I': + log_associate(&ctl, &ctl.in, optarg, SCRIPT_FMT_RAW); + infile = optarg; + break; case 'O': - typescript = optarg; + log_associate(&ctl, &ctl.out, optarg, SCRIPT_FMT_RAW); + outfile = optarg; break; case 'o': ctl.maxsz = strtosize_or_err(optarg, _("failed to parse output limit size")); @@ -980,15 +987,18 @@ int main(int argc, char **argv) argc -= optind; argv += optind; - if (!typescript) { + /* default if no --log-* specified */ + if (!outfile && !infile) { if (argc > 0) - typescript = argv[0]; - else + outfile = argv[0]; + else { die_if_link(&ctl, DEFAULT_TYPESCRIPT_FILENAME); - } + outfile = DEFAULT_TYPESCRIPT_FILENAME; + } - /* associate stdout with typescript file */ - log_associate(&ctl, &ctl.out, typescript, SCRIPT_FMT_RAW); + /* associate stdout with typescript file */ + log_associate(&ctl, &ctl.out, outfile, SCRIPT_FMT_RAW); + } ctl.shell = getenv("SHELL"); if (ctl.shell == NULL) @@ -996,11 +1006,14 @@ int main(int argc, char **argv) getmaster(&ctl); if (!ctl.quiet) { - if (!timingfile) - printf(_("Script started, log file is '%s'.\n"), typescript); - else - printf(_("Script started, log file is '%s', timing file is '%s'.\n"), - typescript, timingfile); + printf(_("Script started")); + if (outfile) + printf(_(", output log file is '%s'"), outfile); + if (infile) + printf(_(", input log file is '%s'"), infile); + if (timingfile) + printf(_(", timing file is '%s'"), timingfile); + printf(_(".\n")); } enable_rawmode_tty(&ctl);