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.\" 31225afb6cSMateusz Piotrowski.Dd January 5, 2021 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*d41149a8SMateusz Piotrowski.Op Fl aefkqr 408d105abcSTom Rhodes.Op Fl F Ar pipe 41e8eb82a8SPeter Wemm.Op Fl t Ar time 42c548db03SRuslan Ermilov.Op Ar file Op Ar command ... 43*d41149a8SMateusz Piotrowski.Nm 44*d41149a8SMateusz Piotrowski.Fl p 45*d41149a8SMateusz Piotrowski.Op Fl deq 46*d41149a8SMateusz 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 . 908d105abcSTom Rhodes.It Fl F Ar pipe 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. 1229b50d902SRodney W. Grimes.El 1239b50d902SRodney W. Grimes.Pp 12451afb8dfSPeter WemmThe script ends when the forked shell (or command) exits (a 1259b50d902SRodney W. Grimes.Em control-D 1269b50d902SRodney W. Grimesto exit 1279b50d902SRodney W. Grimesthe Bourne shell 1289b50d902SRodney W. Grimes.Pf ( Xr sh 1 ) , 1299b50d902SRodney W. Grimesand 1309b50d902SRodney W. Grimes.Em exit , 1319b50d902SRodney W. Grimes.Em logout 1329b50d902SRodney W. Grimesor 133fed771deSPhilippe Charnier.Em control-D 1349b50d902SRodney W. Grimes(if 1359b50d902SRodney W. Grimes.Em ignoreeof 1369b50d902SRodney W. Grimesis not set) for the 1379b50d902SRodney W. GrimesC-shell, 1389b50d902SRodney W. Grimes.Xr csh 1 ) . 1399b50d902SRodney W. Grimes.Pp 1409b50d902SRodney W. GrimesCertain interactive commands, such as 1419b50d902SRodney W. Grimes.Xr vi 1 , 1429b50d902SRodney W. Grimescreate garbage in the typescript file. 143e8937ba0SPhilippe CharnierThe 144e8937ba0SPhilippe Charnier.Nm 145e8937ba0SPhilippe Charnierutility works best with commands that do not manipulate the screen. 1462cb6b4efSBrian FeldmanThe results are meant to emulate a hardcopy terminal, not an addressable one. 1479b50d902SRodney W. Grimes.Sh ENVIRONMENT 148aa2e0334SDavid E. O'BrienThe following environment variables are utilized by 1498fe908efSRuslan Ermilov.Nm : 150*d41149a8SMateusz Piotrowski.Bl -tag -width SCRIPT 1519b91846cSDavid E. O'Brien.It Ev SCRIPT 1529b91846cSDavid E. O'BrienThe 1539b91846cSDavid E. O'Brien.Ev SCRIPT 1549b91846cSDavid E. O'Brienenvironment variable is added to the sub-shell. 1559b91846cSDavid E. O'BrienIf 1569b91846cSDavid E. O'Brien.Ev SCRIPT 1579b91846cSDavid E. O'Brienalready existed in the users environment, 1589b91846cSDavid E. O'Brienits value is overwritten within the sub-shell. 1599b91846cSDavid E. O'BrienThe value of 1609b91846cSDavid E. O'Brien.Ev SCRIPT 1619b91846cSDavid E. O'Brienis the name of the 1629b91846cSDavid E. O'Brien.Ar typescript 1639b91846cSDavid E. O'Brienfile. 1649b50d902SRodney W. Grimes.It Ev SHELL 1659b50d902SRodney W. GrimesIf the variable 1669b50d902SRodney W. Grimes.Ev SHELL 1679b50d902SRodney W. Grimesexists, the shell forked by 168236d2f55SPhilippe Charnier.Nm 16987faa07bSSheldon Hearnwill be that shell. 17087faa07bSSheldon HearnIf 1719b50d902SRodney W. Grimes.Ev SHELL 1729b50d902SRodney W. Grimesis not set, the Bourne shell 1734e86fcacSSheldon Hearnis assumed. 174ef87c4dcSGlen Barber.Pq Most shells set this variable automatically . 1759b50d902SRodney W. Grimes.El 176*d41149a8SMateusz Piotrowski.Sh EXAMPLES 177*d41149a8SMateusz PiotrowskiRecord a simple 178*d41149a8SMateusz Piotrowski.Xr csh 1 179*d41149a8SMateusz Piotrowskisession with no additional details like input, output, and timestamping: 180*d41149a8SMateusz Piotrowski.Bd -literal -offset indent 181*d41149a8SMateusz Piotrowski$ SHELL=/bin/csh script 182*d41149a8SMateusz PiotrowskiScript started, output file is typescript 183*d41149a8SMateusz Piotrowski% date 184*d41149a8SMateusz PiotrowskiTue Jan 5 15:08:10 UTC 2021 185*d41149a8SMateusz Piotrowski% exit 186*d41149a8SMateusz Piotrowskiexit 187*d41149a8SMateusz Piotrowski 188*d41149a8SMateusz PiotrowskiScript done, output file is typescript 189*d41149a8SMateusz Piotrowski.Ed 190*d41149a8SMateusz Piotrowski.Pp 191*d41149a8SMateusz PiotrowskiNow, replay the session recorded in the previous example: 192*d41149a8SMateusz Piotrowski.Bd -literal -offset indent 193*d41149a8SMateusz Piotrowski$ cat ./typescript 194*d41149a8SMateusz PiotrowskiScript started on Tue Jan 5 15:08:08 2021 195*d41149a8SMateusz Piotrowski% date 196*d41149a8SMateusz PiotrowskiTue Jan 5 15:08:10 UTC 2021 197*d41149a8SMateusz Piotrowski% exit 198*d41149a8SMateusz Piotrowskiexit 199*d41149a8SMateusz Piotrowski 200*d41149a8SMateusz PiotrowskiScript done on Tue Jan 5 15:08:13 2021 201*d41149a8SMateusz Piotrowski.Ed 202*d41149a8SMateusz Piotrowski.Pp 203*d41149a8SMateusz PiotrowskiRecord a 204*d41149a8SMateusz Piotrowski.Xr csh 1 205*d41149a8SMateusz Piotrowskisession, but this time with additional details like timestamping: 206*d41149a8SMateusz Piotrowski.Bd -literal -offset indent 207*d41149a8SMateusz Piotrowski$ SHELL=/bin/csh script -r 208*d41149a8SMateusz PiotrowskiScript started, output file is typescript 209*d41149a8SMateusz Piotrowski% date 210*d41149a8SMateusz PiotrowskiTue Jan 5 15:17:11 UTC 2021 211*d41149a8SMateusz Piotrowski% exit 212*d41149a8SMateusz Piotrowskiexit 213*d41149a8SMateusz Piotrowski 214*d41149a8SMateusz PiotrowskiScript done, output file is typescript 215*d41149a8SMateusz Piotrowski.Ed 216*d41149a8SMateusz Piotrowski.Pp 217*d41149a8SMateusz PiotrowskiIn order to replay a sessions recorded with the 218*d41149a8SMateusz Piotrowski.Fl r 219*d41149a8SMateusz Piotrowskiflag, it is necessary to specify 220*d41149a8SMateusz Piotrowski.Fl p 221*d41149a8SMateusz Piotrowski.Po 222*d41149a8SMateusz Piotrowski.Xr cat 1 223*d41149a8SMateusz Piotrowskiwill not work because of all the aditional information stored in the session file 224*d41149a8SMateusz Piotrowski.Pc . 225*d41149a8SMateusz PiotrowskiAlso, let us use 226*d41149a8SMateusz Piotrowski.Fl d 227*d41149a8SMateusz Piotrowskito print the whole session at once: 228*d41149a8SMateusz Piotrowski.Bd -literal -offset indent 229*d41149a8SMateusz Piotrowski$ script -dp ./typescript 230*d41149a8SMateusz PiotrowskiScript started on Tue Jan 5 15:17:09 2021 231*d41149a8SMateusz Piotrowski% date 232*d41149a8SMateusz PiotrowskiTue Jan 5 15:17:11 UTC 2021 233*d41149a8SMateusz Piotrowski% exit 234*d41149a8SMateusz Piotrowskiexit 235*d41149a8SMateusz Piotrowski 236*d41149a8SMateusz PiotrowskiScript done on Tue Jan 5 15:17:14 2021 237*d41149a8SMateusz Piotrowski.Ed 2389b50d902SRodney W. Grimes.Sh SEE ALSO 239d7deff23SSergey Kandaurov.Xr csh 1 240ef87c4dcSGlen Barber.Po 241ef87c4dcSGlen Barberfor the 2429b50d902SRodney W. Grimes.Em history 243ef87c4dcSGlen Barbermechanism 244d7deff23SSergey Kandaurov.Pc , 245d7deff23SSergey Kandaurov.Xr filemon 4 2469b50d902SRodney W. Grimes.Sh HISTORY 2479b50d902SRodney W. GrimesThe 248236d2f55SPhilippe Charnier.Nm 2499b50d902SRodney W. Grimescommand appeared in 2509b50d902SRodney W. Grimes.Bx 3.0 . 251df53360cSBrian Somers.Pp 252df53360cSBrian SomersThe 253df53360cSBrian Somers.Fl d , 254df53360cSBrian Somers.Fl p 255df53360cSBrian Somersand 256df53360cSBrian Somers.Fl r 257df53360cSBrian Somersoptions first appeared in 258fabb5579SBrian Somers.Nx 2.0 259fabb5579SBrian Somersand were ported to 260c89bc700SDavid E. O'Brien.Fx 9.2 . 2619b50d902SRodney W. Grimes.Sh BUGS 262e8937ba0SPhilippe CharnierThe 263e8937ba0SPhilippe Charnier.Nm 264e8937ba0SPhilippe Charnierutility places 2659b50d902SRodney W. Grimes.Sy everything 2669b50d902SRodney W. Grimesin the log file, including linefeeds and backspaces. 2679b50d902SRodney W. GrimesThis is not what the naive user expects. 26851afb8dfSPeter Wemm.Pp 26951afb8dfSPeter WemmIt is not possible to specify a command without also naming the script file 27032c21313SSteve Pricebecause of argument parsing compatibility issues. 271e8eb82a8SPeter Wemm.Pp 272e8eb82a8SPeter WemmWhen running in 273e8eb82a8SPeter Wemm.Fl k 2746a3e8b0aSRuslan Ermilovmode, echo cancelling is far from ideal. 2756a3e8b0aSRuslan ErmilovThe slave terminal mode is checked 2766a3e8b0aSRuslan Ermilovfor ECHO mode to check when to avoid manual echo logging. 2776a3e8b0aSRuslan ErmilovThis does not 278ef87c4dcSGlen Barberwork when the terminal is in a raw mode where 279ef87c4dcSGlen Barberthe program being run is doing manual echo. 28029da7547SMikolaj Golub.Pp 281ef87c4dcSGlen BarberIf 28229da7547SMikolaj Golub.Nm 283ef87c4dcSGlen Barberreads zero bytes from the terminal, it switches to a mode when it 284ef87c4dcSGlen Barberonly attempts to read 285ef87c4dcSGlen Barberonce a second until there is data to read. 286ef87c4dcSGlen BarberThis prevents 28729da7547SMikolaj Golub.Nm 288ef87c4dcSGlen Barberfrom spinning on zero-byte reads, but might cause a 1-second delay in 289ef87c4dcSGlen Barberprocessing of user input. 290