diff --git a/term-utils/script.c b/term-utils/script.c index 242b815..778fbbe 100644 --- a/term-utils/script.c +++ b/term-utils/script.c @@ -101,12 +101,14 @@ int l; char line[] = "/dev/ptyXX"; #endif int aflg = 0; +int dflg = 0; char *cflg = NULL; int eflg = 0; int fflg = 0; int qflg = 0; int tflg = 0; int forceflg = 0; +int fdnum_typescript = 0; int die; int resized; @@ -171,6 +173,7 @@ main(int argc, char **argv) { { "force", no_argument, NULL, FORCE_OPTION, }, { "quiet", no_argument, NULL, 'q' }, { "timing", optional_argument, NULL, 't' }, + { "descriptor", no_argument, NULL, 'd' }, { "version", no_argument, NULL, 'V' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 } @@ -182,8 +185,10 @@ main(int argc, char **argv) { textdomain(PACKAGE); atexit(close_stdout); - while ((ch = getopt_long(argc, argv, "ac:efqt::Vh", longopts, NULL)) != -1) + while ((ch = getopt_long(argc, argv, "dac:efqt::Vh", longopts, NULL)) != -1) switch(ch) { + case 'd': + dflg = 1; case 'a': aflg = 1; break; @@ -229,7 +234,22 @@ main(int argc, char **argv) { fname = DEFAULT_OUTPUT; die_if_link(fname); } - if ((fscript = fopen(fname, aflg ? "a" : "w")) == NULL) { + + + if (dflg == 1){ + + fdnum_typescript = atoi(fname); + + if (fdnum_typescript == 0){ + warn(_("file descriptor is not a number")); + fail(); + } + + if ((fscript = fdopen (fdnum_typescript, "w")) == NULL) { + warn(_("cannot open fd %s"), fname); + fail(); + } + }else if((fscript = fopen(fname, aflg ? "a" : "w")) == NULL) { warn(_("cannot open %s"), fname); fail(); } @@ -239,8 +259,13 @@ main(int argc, char **argv) { shell = _PATH_BSHELL; getmaster(); - if (!qflg) + + if ((!qflg) && (dflg == 1)){ + printf(_("Script started, file descriptor number is %s\n"), fname); + }else{ printf(_("Script started, file is %s\n"), fname); + } + fixtty(); #ifdef HAVE_LIBUTEMPTER @@ -495,8 +520,14 @@ done(void) { master = -1; } else { tcsetattr(STDIN_FILENO, TCSADRAIN, &tt); - if (!qflg) + + if ((!qflg) && (dflg == 1)){ + printf(_("Script done, file descriptor number is %s\n"), fname); + }else{ printf(_("Script done, file is %s\n"), fname); + } + + #ifdef HAVE_LIBUTEMPTER if (master >= 0) utempter_remove_record(master);