19b50d902SRodney W. Grimes.\" Copyright (c) 1980, 1990, 1993 29b50d902SRodney W. Grimes.\" The Regents of the University of California. All rights reserved. 39b50d902SRodney W. Grimes.\" 49b50d902SRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without 59b50d902SRodney W. Grimes.\" modification, are permitted provided that the following conditions 69b50d902SRodney W. Grimes.\" are met: 79b50d902SRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright 89b50d902SRodney W. Grimes.\" notice, this list of conditions and the following disclaimer. 99b50d902SRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright 109b50d902SRodney W. Grimes.\" notice, this list of conditions and the following disclaimer in the 119b50d902SRodney W. Grimes.\" documentation and/or other materials provided with the distribution. 12fbbd9655SWarner Losh.\" 3. Neither the name of the University nor the names of its contributors 139b50d902SRodney W. Grimes.\" may be used to endorse or promote products derived from this software 149b50d902SRodney W. Grimes.\" without specific prior written permission. 159b50d902SRodney W. Grimes.\" 169b50d902SRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 179b50d902SRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 189b50d902SRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 199b50d902SRodney W. Grimes.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 209b50d902SRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 219b50d902SRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 229b50d902SRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 239b50d902SRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 249b50d902SRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 259b50d902SRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 269b50d902SRodney W. Grimes.\" SUCH DAMAGE. 279b50d902SRodney W. Grimes.\" 289b50d902SRodney W. Grimes.\" @(#)script.1 8.1 (Berkeley) 6/6/93 29c3aac50fSPeter Wemm.\" $FreeBSD$ 309b50d902SRodney W. Grimes.\" 31*8e096e24SDag-Erling Smørgrav.Dd October 26, 2022 329b50d902SRodney W. Grimes.Dt SCRIPT 1 3362500372SRuslan Ermilov.Os 349b50d902SRodney W. Grimes.Sh NAME 359b50d902SRodney W. Grimes.Nm script 369b50d902SRodney W. Grimes.Nd make typescript of terminal session 379b50d902SRodney W. Grimes.Sh SYNOPSIS 38236d2f55SPhilippe Charnier.Nm 39*8e096e24SDag-Erling Smørgrav.Op Fl aeFfkqr 40e8eb82a8SPeter Wemm.Op Fl t Ar time 41c548db03SRuslan Ermilov.Op Ar file Op Ar command ... 42d41149a8SMateusz Piotrowski.Nm 43d41149a8SMateusz Piotrowski.Fl p 44d41149a8SMateusz Piotrowski.Op Fl deq 456c4afed5SSimon J. Gerraty.Op Fl T Ar fmt 46d41149a8SMateusz Piotrowski.Op Ar file 479b50d902SRodney W. Grimes.Sh DESCRIPTION 48e8937ba0SPhilippe CharnierThe 49e8937ba0SPhilippe Charnier.Nm 50e8937ba0SPhilippe Charnierutility makes a typescript of everything printed on your terminal. 519b50d902SRodney W. GrimesIt is useful for students who need a hardcopy record of an interactive 529b50d902SRodney W. Grimessession as proof of an assignment, as the typescript file 539b50d902SRodney W. Grimescan be printed out later with 549b50d902SRodney W. Grimes.Xr lpr 1 . 559b50d902SRodney W. Grimes.Pp 569b50d902SRodney W. GrimesIf the argument 579b50d902SRodney W. Grimes.Ar file 589b50d902SRodney W. Grimesis given, 599b50d902SRodney W. Grimes.Nm 609b50d902SRodney W. Grimessaves all dialogue in 619b50d902SRodney W. Grimes.Ar file . 629b50d902SRodney W. GrimesIf no file name is given, the typescript is saved in the file 639b50d902SRodney W. Grimes.Pa typescript . 649b50d902SRodney W. Grimes.Pp 6551afb8dfSPeter WemmIf the argument 66fed771deSPhilippe Charnier.Ar command 6751afb8dfSPeter Wemmis given, 6851afb8dfSPeter Wemm.Nm 6951afb8dfSPeter Wemmwill run the specified command with an optional argument vector 7051afb8dfSPeter Wemminstead of an interactive shell. 7151afb8dfSPeter Wemm.Pp 72fed771deSPhilippe CharnierThe following options are available: 73225afb6cSMateusz Piotrowski.Bl -tag -width "-F pipe" 749b50d902SRodney W. Grimes.It Fl a 759b50d902SRodney W. GrimesAppend the output to 769b50d902SRodney W. Grimes.Ar file 779b50d902SRodney W. Grimesor 789b50d902SRodney W. Grimes.Pa typescript , 799b50d902SRodney W. Grimesretaining the prior contents. 80df53360cSBrian Somers.It Fl d 81df53360cSBrian SomersWhen playing back a session with the 82df53360cSBrian Somers.Fl p 83aee53c33SJoel Dahlflag, do not sleep between records when playing back a timestamped session. 84f9177b6cSWarner Losh.It Fl e 85f9177b6cSWarner LoshAccepted for compatibility with 86f9177b6cSWarner Losh.Em util-linux 87f9177b6cSWarner Losh.Nm . 88f9177b6cSWarner LoshThe child command exit status is always the exit status of 89f9177b6cSWarner Losh.Nm . 90*8e096e24SDag-Erling Smørgrav.It Fl F 918d105abcSTom RhodesImmediately flush output after each write. 928d105abcSTom RhodesThis will allow a user to create a named pipe using 938d105abcSTom Rhodes.Xr mkfifo 1 948d105abcSTom Rhodesand another user may watch the live session using a utility like 958d105abcSTom Rhodes.Xr cat 1 . 966cff4e07SDavid E. O'Brien.It Fl f 976cff4e07SDavid E. O'BrienCreate 986cff4e07SDavid E. O'Brien.Ar file.filemon 996cff4e07SDavid E. O'Brienor 1006cff4e07SDavid E. O'Brien.Pa typescript.filemon 1016cff4e07SDavid E. O'Brienusing 1026cff4e07SDavid E. O'Brien.Xr filemon 4 . 103e8eb82a8SPeter Wemm.It Fl k 104ef87c4dcSGlen BarberLog keys sent to the program as well as output. 105df53360cSBrian Somers.It Fl p 106df53360cSBrian SomersPlay back a session recorded with the 107df53360cSBrian Somers.Fl r 108df53360cSBrian Somersflag in real time. 10951afb8dfSPeter Wemm.It Fl q 110df53360cSBrian SomersRun in quiet mode, omit the start, stop and command status messages. 111df53360cSBrian Somers.It Fl r 112df53360cSBrian SomersRecord a session with input, output, and timestamping. 113e8eb82a8SPeter Wemm.It Fl t Ar time 114ef87c4dcSGlen BarberSpecify the interval at which the script output file will be flushed 115ef87c4dcSGlen Barberto disk, in seconds. 1166a3e8b0aSRuslan ErmilovA value of 0 117e8eb82a8SPeter Wemmcauses 118e8eb82a8SPeter Wemm.Nm 119ef87c4dcSGlen Barberto flush after every character I/O event. 1206a3e8b0aSRuslan ErmilovThe default interval is 1214cbaceabSJoseph Koshy30 seconds. 1226c4afed5SSimon J. Gerraty.It Fl T Ar fmt 1236c4afed5SSimon J. GerratyImplies 1246c4afed5SSimon J. Gerraty.Fl p , 1256c4afed5SSimon J. Gerratybut just reports the time-stamp of each output. 1266c4afed5SSimon J. GerratyThis is very useful for assessing the timing of events. 1276c4afed5SSimon J. Gerraty.Pp 1286c4afed5SSimon J. GerratyIf 1296c4afed5SSimon J. Gerraty.Ar fmt 1306c4afed5SSimon J. Gerratydoes not contain any 1316c4afed5SSimon J. Gerraty.Ql % 1326c4afed5SSimon J. Gerratycharacters, it indicates the default format: 13331fde973SSimon J. Gerraty.Ql %n@ %s [%Y-%m-%d %T]%n , 1346c4afed5SSimon J. Gerratywhich is useful for both tools and humans to read, should be used. 13531fde973SSimon J. GerratyNote that time-stamps will only be output when different from the 13631fde973SSimon J. Gerratyprevious one. 1379b50d902SRodney W. Grimes.El 1389b50d902SRodney W. Grimes.Pp 13951afb8dfSPeter WemmThe script ends when the forked shell (or command) exits (a 1409b50d902SRodney W. Grimes.Em control-D 1419b50d902SRodney W. Grimesto exit 1429b50d902SRodney W. Grimesthe Bourne shell 1439b50d902SRodney W. Grimes.Pf ( Xr sh 1 ) , 1449b50d902SRodney W. Grimesand 1459b50d902SRodney W. Grimes.Em exit , 1469b50d902SRodney W. Grimes.Em logout 1479b50d902SRodney W. Grimesor 148fed771deSPhilippe Charnier.Em control-D 1499b50d902SRodney W. Grimes(if 1509b50d902SRodney W. Grimes.Em ignoreeof 1519b50d902SRodney W. Grimesis not set) for the 1529b50d902SRodney W. GrimesC-shell, 1539b50d902SRodney W. Grimes.Xr csh 1 ) . 1549b50d902SRodney W. Grimes.Pp 1559b50d902SRodney W. GrimesCertain interactive commands, such as 1569b50d902SRodney W. Grimes.Xr vi 1 , 1579b50d902SRodney W. Grimescreate garbage in the typescript file. 158e8937ba0SPhilippe CharnierThe 159e8937ba0SPhilippe Charnier.Nm 160e8937ba0SPhilippe Charnierutility works best with commands that do not manipulate the screen. 1612cb6b4efSBrian FeldmanThe results are meant to emulate a hardcopy terminal, not an addressable one. 1629b50d902SRodney W. Grimes.Sh ENVIRONMENT 163aa2e0334SDavid E. O'BrienThe following environment variables are utilized by 1648fe908efSRuslan Ermilov.Nm : 165d41149a8SMateusz Piotrowski.Bl -tag -width SCRIPT 1669b91846cSDavid E. O'Brien.It Ev SCRIPT 1679b91846cSDavid E. O'BrienThe 1689b91846cSDavid E. O'Brien.Ev SCRIPT 1699b91846cSDavid E. O'Brienenvironment variable is added to the sub-shell. 1709b91846cSDavid E. O'BrienIf 1719b91846cSDavid E. O'Brien.Ev SCRIPT 1729b91846cSDavid E. O'Brienalready existed in the users environment, 1739b91846cSDavid E. O'Brienits value is overwritten within the sub-shell. 1749b91846cSDavid E. O'BrienThe value of 1759b91846cSDavid E. O'Brien.Ev SCRIPT 1769b91846cSDavid E. O'Brienis the name of the 1779b91846cSDavid E. O'Brien.Ar typescript 1789b91846cSDavid E. O'Brienfile. 1799b50d902SRodney W. Grimes.It Ev SHELL 1809b50d902SRodney W. GrimesIf the variable 1819b50d902SRodney W. Grimes.Ev SHELL 1829b50d902SRodney W. Grimesexists, the shell forked by 183236d2f55SPhilippe Charnier.Nm 18487faa07bSSheldon Hearnwill be that shell. 18587faa07bSSheldon HearnIf 1869b50d902SRodney W. Grimes.Ev SHELL 1879b50d902SRodney W. Grimesis not set, the Bourne shell 1884e86fcacSSheldon Hearnis assumed. 189ef87c4dcSGlen Barber.Pq Most shells set this variable automatically . 1909b50d902SRodney W. Grimes.El 191d41149a8SMateusz Piotrowski.Sh EXAMPLES 192d41149a8SMateusz PiotrowskiRecord a simple 193d41149a8SMateusz Piotrowski.Xr csh 1 194d41149a8SMateusz Piotrowskisession with no additional details like input, output, and timestamping: 195d41149a8SMateusz Piotrowski.Bd -literal -offset indent 196d41149a8SMateusz Piotrowski$ SHELL=/bin/csh script 197d41149a8SMateusz PiotrowskiScript started, output file is typescript 198d41149a8SMateusz Piotrowski% date 199d41149a8SMateusz PiotrowskiTue Jan 5 15:08:10 UTC 2021 200d41149a8SMateusz Piotrowski% exit 201d41149a8SMateusz Piotrowskiexit 202d41149a8SMateusz Piotrowski 203d41149a8SMateusz PiotrowskiScript done, output file is typescript 204d41149a8SMateusz Piotrowski.Ed 205d41149a8SMateusz Piotrowski.Pp 206d41149a8SMateusz PiotrowskiNow, replay the session recorded in the previous example: 207d41149a8SMateusz Piotrowski.Bd -literal -offset indent 208d41149a8SMateusz Piotrowski$ cat ./typescript 209d41149a8SMateusz PiotrowskiScript started on Tue Jan 5 15:08:08 2021 210d41149a8SMateusz Piotrowski% date 211d41149a8SMateusz PiotrowskiTue Jan 5 15:08:10 UTC 2021 212d41149a8SMateusz Piotrowski% exit 213d41149a8SMateusz Piotrowskiexit 214d41149a8SMateusz Piotrowski 215d41149a8SMateusz PiotrowskiScript done on Tue Jan 5 15:08:13 2021 216d41149a8SMateusz Piotrowski.Ed 217d41149a8SMateusz Piotrowski.Pp 218d41149a8SMateusz PiotrowskiRecord a 219d41149a8SMateusz Piotrowski.Xr csh 1 220d41149a8SMateusz Piotrowskisession, but this time with additional details like timestamping: 221d41149a8SMateusz Piotrowski.Bd -literal -offset indent 222d41149a8SMateusz Piotrowski$ SHELL=/bin/csh script -r 223d41149a8SMateusz PiotrowskiScript started, output file is typescript 224d41149a8SMateusz Piotrowski% date 225d41149a8SMateusz PiotrowskiTue Jan 5 15:17:11 UTC 2021 226d41149a8SMateusz Piotrowski% exit 227d41149a8SMateusz Piotrowskiexit 228d41149a8SMateusz Piotrowski 229d41149a8SMateusz PiotrowskiScript done, output file is typescript 230d41149a8SMateusz Piotrowski.Ed 231d41149a8SMateusz Piotrowski.Pp 232d41149a8SMateusz PiotrowskiIn order to replay a sessions recorded with the 233d41149a8SMateusz Piotrowski.Fl r 234d41149a8SMateusz Piotrowskiflag, it is necessary to specify 235d41149a8SMateusz Piotrowski.Fl p 236d41149a8SMateusz Piotrowski.Po 237d41149a8SMateusz Piotrowski.Xr cat 1 238d41149a8SMateusz Piotrowskiwill not work because of all the aditional information stored in the session file 239d41149a8SMateusz Piotrowski.Pc . 240d41149a8SMateusz PiotrowskiAlso, let us use 241d41149a8SMateusz Piotrowski.Fl d 242d41149a8SMateusz Piotrowskito print the whole session at once: 243d41149a8SMateusz Piotrowski.Bd -literal -offset indent 244d41149a8SMateusz Piotrowski$ script -dp ./typescript 245d41149a8SMateusz PiotrowskiScript started on Tue Jan 5 15:17:09 2021 246d41149a8SMateusz Piotrowski% date 247d41149a8SMateusz PiotrowskiTue Jan 5 15:17:11 UTC 2021 248d41149a8SMateusz Piotrowski% exit 249d41149a8SMateusz Piotrowskiexit 250d41149a8SMateusz Piotrowski 251d41149a8SMateusz PiotrowskiScript done on Tue Jan 5 15:17:14 2021 252d41149a8SMateusz Piotrowski.Ed 2539b50d902SRodney W. Grimes.Sh SEE ALSO 254d7deff23SSergey Kandaurov.Xr csh 1 255ef87c4dcSGlen Barber.Po 256ef87c4dcSGlen Barberfor the 2579b50d902SRodney W. Grimes.Em history 258ef87c4dcSGlen Barbermechanism 259d7deff23SSergey Kandaurov.Pc , 260d7deff23SSergey Kandaurov.Xr filemon 4 2619b50d902SRodney W. Grimes.Sh HISTORY 2629b50d902SRodney W. GrimesThe 263236d2f55SPhilippe Charnier.Nm 2649b50d902SRodney W. Grimescommand appeared in 2659b50d902SRodney W. Grimes.Bx 3.0 . 266df53360cSBrian Somers.Pp 267df53360cSBrian SomersThe 268df53360cSBrian Somers.Fl d , 269df53360cSBrian Somers.Fl p 270df53360cSBrian Somersand 271df53360cSBrian Somers.Fl r 272df53360cSBrian Somersoptions first appeared in 273fabb5579SBrian Somers.Nx 2.0 274fabb5579SBrian Somersand were ported to 275c89bc700SDavid E. O'Brien.Fx 9.2 . 2769b50d902SRodney W. Grimes.Sh BUGS 277e8937ba0SPhilippe CharnierThe 278e8937ba0SPhilippe Charnier.Nm 279e8937ba0SPhilippe Charnierutility places 2809b50d902SRodney W. Grimes.Sy everything 2819b50d902SRodney W. Grimesin the log file, including linefeeds and backspaces. 2829b50d902SRodney W. GrimesThis is not what the naive user expects. 28351afb8dfSPeter Wemm.Pp 28451afb8dfSPeter WemmIt is not possible to specify a command without also naming the script file 28532c21313SSteve Pricebecause of argument parsing compatibility issues. 286e8eb82a8SPeter Wemm.Pp 287e8eb82a8SPeter WemmWhen running in 288e8eb82a8SPeter Wemm.Fl k 2896a3e8b0aSRuslan Ermilovmode, echo cancelling is far from ideal. 2906a3e8b0aSRuslan ErmilovThe slave terminal mode is checked 2916a3e8b0aSRuslan Ermilovfor ECHO mode to check when to avoid manual echo logging. 2926a3e8b0aSRuslan ErmilovThis does not 293ef87c4dcSGlen Barberwork when the terminal is in a raw mode where 294ef87c4dcSGlen Barberthe program being run is doing manual echo. 29529da7547SMikolaj Golub.Pp 296ef87c4dcSGlen BarberIf 29729da7547SMikolaj Golub.Nm 298ef87c4dcSGlen Barberreads zero bytes from the terminal, it switches to a mode when it 299ef87c4dcSGlen Barberonly attempts to read 300ef87c4dcSGlen Barberonce a second until there is data to read. 301ef87c4dcSGlen BarberThis prevents 30229da7547SMikolaj Golub.Nm 303ef87c4dcSGlen Barberfrom spinning on zero-byte reads, but might cause a 1-second delay in 304ef87c4dcSGlen Barberprocessing of user input. 305