script: add more info to script header
This patch introduces [...] to store extra information about terminal to the typescript header. For example: Script started on 2018-05-14 12:52:32+02:00 [TERM="xterm-256color" TTY="/dev/pts/3" COLS="190" LINES="53"] or Script started on 2018-05-14 12:54:01+02:00 [<not executed on terminal>] if stdout is not terminal. Addresses: https://github.com/karelzak/util-linux/issues/583 Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
c068922a68
commit
4d9b788d64
|
@ -15,12 +15,6 @@ column
|
||||||
|
|
||||||
script
|
script
|
||||||
------
|
------
|
||||||
- (!) add terminal type ($TERM), columns and lines to the header line, something like:
|
|
||||||
|
|
||||||
Script started on 2018-03-05 13:02:08+0100 [term="xterm-256color", lines=53, columns=190]
|
|
||||||
|
|
||||||
see https://github.com/karelzak/util-linux/issues/583
|
|
||||||
|
|
||||||
- (!) add [exit=<command-exit-code>] to the "done" typescript message
|
- (!) add [exit=<command-exit-code>] to the "done" typescript message
|
||||||
|
|
||||||
- think about optional "event" records in timing file to save information
|
- think about optional "event" records in timing file to save information
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct chardata {
|
||||||
|
|
||||||
extern int get_terminal_dimension(int *cols, int *lines);
|
extern int get_terminal_dimension(int *cols, int *lines);
|
||||||
extern int get_terminal_width(int default_width);
|
extern int get_terminal_width(int default_width);
|
||||||
|
extern int get_terminal_type(const char **type);
|
||||||
extern int get_terminal_name(const char **path, const char **name,
|
extern int get_terminal_name(const char **path, const char **name,
|
||||||
const char **number);
|
const char **number);
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,13 @@ int get_terminal_name(const char **path,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int get_terminal_type(const char **type)
|
||||||
|
{
|
||||||
|
*type = getenv("TERM");
|
||||||
|
if (*type)
|
||||||
|
return -EINVAL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef TEST_PROGRAM_TTYUTILS
|
#ifdef TEST_PROGRAM_TTYUTILS
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
|
|
|
@ -182,6 +182,36 @@ static void __attribute__((__noreturn__)) usage(void)
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void typescript_message_start(const struct script_control *ctl, time_t *tvec)
|
||||||
|
{
|
||||||
|
char buf[FORMAT_TIMESTAMP_MAX];
|
||||||
|
int cols = 0, lines = 0;
|
||||||
|
const char *tty = NULL, *term = NULL;
|
||||||
|
|
||||||
|
if (!ctl->typescriptfp)
|
||||||
|
return;
|
||||||
|
|
||||||
|
strtime_iso(tvec, ISO_TIMESTAMP, buf, sizeof(buf));
|
||||||
|
|
||||||
|
fprintf(ctl->typescriptfp, _("Script started on %s ["), buf);
|
||||||
|
|
||||||
|
if (ctl->isterm) {
|
||||||
|
get_terminal_dimension(&cols, &lines);
|
||||||
|
get_terminal_name(&tty, NULL, NULL);
|
||||||
|
get_terminal_type(&term);
|
||||||
|
|
||||||
|
if (term)
|
||||||
|
fprintf(ctl->typescriptfp, "TERM=\"%s\" ", term);
|
||||||
|
if (tty)
|
||||||
|
fprintf(ctl->typescriptfp, "TTY=\"%s\" ", tty);
|
||||||
|
|
||||||
|
fprintf(ctl->typescriptfp, "COLS=\"%d\" LINES=\"%d\"", cols, lines);
|
||||||
|
} else
|
||||||
|
fprintf(ctl->typescriptfp, _("<not executed on terminal>"));
|
||||||
|
|
||||||
|
fputs("]\n", ctl->typescriptfp);
|
||||||
|
}
|
||||||
|
|
||||||
static void die_if_link(const struct script_control *ctl)
|
static void die_if_link(const struct script_control *ctl)
|
||||||
{
|
{
|
||||||
struct stat s;
|
struct stat s;
|
||||||
|
@ -496,11 +526,9 @@ static void do_io(struct script_control *ctl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ctl->typescriptfp) {
|
if (ctl->typescriptfp)
|
||||||
char buf[FORMAT_TIMESTAMP_MAX];
|
typescript_message_start(ctl, &tvec);
|
||||||
strtime_iso(&tvec, ISO_TIMESTAMP, buf, sizeof(buf));
|
|
||||||
fprintf(ctl->typescriptfp, _("Script started on %s\n"), buf);
|
|
||||||
}
|
|
||||||
gettime_monotonic(&ctl->oldtime);
|
gettime_monotonic(&ctl->oldtime);
|
||||||
|
|
||||||
while (!ctl->die) {
|
while (!ctl->die) {
|
||||||
|
|
Loading…
Reference in New Issue