xref: /freebsd/usr.bin/script/script.1 (revision 6c4afed5667a65f3c5bd308a934e7de8c0526954)
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*6c4afed5SSimon J. Gerraty.Dd March 9, 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
39d41149a8SMateusz 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 ...
43d41149a8SMateusz Piotrowski.Nm
44d41149a8SMateusz Piotrowski.Fl p
45d41149a8SMateusz Piotrowski.Op Fl deq
46*6c4afed5SSimon J. Gerraty.Op Fl T Ar fmt
47d41149a8SMateusz Piotrowski.Op Ar file
489b50d902SRodney W. Grimes.Sh DESCRIPTION
49e8937ba0SPhilippe CharnierThe
50e8937ba0SPhilippe Charnier.Nm
51e8937ba0SPhilippe Charnierutility makes a typescript of everything printed on your terminal.
529b50d902SRodney W. GrimesIt is useful for students who need a hardcopy record of an interactive
539b50d902SRodney W. Grimessession as proof of an assignment, as the typescript file
549b50d902SRodney W. Grimescan be printed out later with
559b50d902SRodney W. Grimes.Xr lpr 1 .
569b50d902SRodney W. Grimes.Pp
579b50d902SRodney W. GrimesIf the argument
589b50d902SRodney W. Grimes.Ar file
599b50d902SRodney W. Grimesis given,
609b50d902SRodney W. Grimes.Nm
619b50d902SRodney W. Grimessaves all dialogue in
629b50d902SRodney W. Grimes.Ar file .
639b50d902SRodney W. GrimesIf no file name is given, the typescript is saved in the file
649b50d902SRodney W. Grimes.Pa typescript .
659b50d902SRodney W. Grimes.Pp
6651afb8dfSPeter WemmIf the argument
67fed771deSPhilippe Charnier.Ar command
6851afb8dfSPeter Wemmis given,
6951afb8dfSPeter Wemm.Nm
7051afb8dfSPeter Wemmwill run the specified command with an optional argument vector
7151afb8dfSPeter Wemminstead of an interactive shell.
7251afb8dfSPeter Wemm.Pp
73fed771deSPhilippe CharnierThe following options are available:
74225afb6cSMateusz Piotrowski.Bl -tag -width "-F pipe"
759b50d902SRodney W. Grimes.It Fl a
769b50d902SRodney W. GrimesAppend the output to
779b50d902SRodney W. Grimes.Ar file
789b50d902SRodney W. Grimesor
799b50d902SRodney W. Grimes.Pa typescript ,
809b50d902SRodney W. Grimesretaining the prior contents.
81df53360cSBrian Somers.It Fl d
82df53360cSBrian SomersWhen playing back a session with the
83df53360cSBrian Somers.Fl p
84aee53c33SJoel Dahlflag, do not sleep between records when playing back a timestamped session.
85f9177b6cSWarner Losh.It Fl e
86f9177b6cSWarner LoshAccepted for compatibility with
87f9177b6cSWarner Losh.Em util-linux
88f9177b6cSWarner Losh.Nm .
89f9177b6cSWarner LoshThe child command exit status is always the exit status of
90f9177b6cSWarner Losh.Nm .
918d105abcSTom Rhodes.It Fl F Ar pipe
928d105abcSTom RhodesImmediately flush output after each write.
938d105abcSTom RhodesThis will allow a user to create a named pipe using
948d105abcSTom Rhodes.Xr mkfifo 1
958d105abcSTom Rhodesand another user may watch the live session using a utility like
968d105abcSTom Rhodes.Xr cat 1 .
976cff4e07SDavid E. O'Brien.It Fl f
986cff4e07SDavid E. O'BrienCreate
996cff4e07SDavid E. O'Brien.Ar file.filemon
1006cff4e07SDavid E. O'Brienor
1016cff4e07SDavid E. O'Brien.Pa typescript.filemon
1026cff4e07SDavid E. O'Brienusing
1036cff4e07SDavid E. O'Brien.Xr filemon 4 .
104e8eb82a8SPeter Wemm.It Fl k
105ef87c4dcSGlen BarberLog keys sent to the program as well as output.
106df53360cSBrian Somers.It Fl p
107df53360cSBrian SomersPlay back a session recorded with the
108df53360cSBrian Somers.Fl r
109df53360cSBrian Somersflag in real time.
11051afb8dfSPeter Wemm.It Fl q
111df53360cSBrian SomersRun in quiet mode, omit the start, stop and command status messages.
112df53360cSBrian Somers.It Fl r
113df53360cSBrian SomersRecord a session with input, output, and timestamping.
114e8eb82a8SPeter Wemm.It Fl t Ar time
115ef87c4dcSGlen BarberSpecify the interval at which the script output file will be flushed
116ef87c4dcSGlen Barberto disk, in seconds.
1176a3e8b0aSRuslan ErmilovA value of 0
118e8eb82a8SPeter Wemmcauses
119e8eb82a8SPeter Wemm.Nm
120ef87c4dcSGlen Barberto flush after every character I/O event.
1216a3e8b0aSRuslan ErmilovThe default interval is
1224cbaceabSJoseph Koshy30 seconds.
123*6c4afed5SSimon J. Gerraty.It Fl T Ar fmt
124*6c4afed5SSimon J. GerratyImplies
125*6c4afed5SSimon J. Gerraty.Fl p ,
126*6c4afed5SSimon J. Gerratybut just reports the time-stamp of each output.
127*6c4afed5SSimon J. GerratyThis is very useful for assessing the timing of events.
128*6c4afed5SSimon J. Gerraty.Pp
129*6c4afed5SSimon J. GerratyIf
130*6c4afed5SSimon J. Gerraty.Ar fmt
131*6c4afed5SSimon J. Gerratydoes not contain any
132*6c4afed5SSimon J. Gerraty.Ql %
133*6c4afed5SSimon J. Gerratycharacters, it indicates the default format:
134*6c4afed5SSimon J. Gerraty.Ql %n@ %s [%Y-%m-%d %T]\  ,
135*6c4afed5SSimon J. Gerratywhich is useful for both tools and humans to read, should be used.
1369b50d902SRodney W. Grimes.El
1379b50d902SRodney W. Grimes.Pp
13851afb8dfSPeter WemmThe script ends when the forked shell (or command) exits (a
1399b50d902SRodney W. Grimes.Em control-D
1409b50d902SRodney W. Grimesto exit
1419b50d902SRodney W. Grimesthe Bourne shell
1429b50d902SRodney W. Grimes.Pf ( Xr sh 1 ) ,
1439b50d902SRodney W. Grimesand
1449b50d902SRodney W. Grimes.Em exit ,
1459b50d902SRodney W. Grimes.Em logout
1469b50d902SRodney W. Grimesor
147fed771deSPhilippe Charnier.Em control-D
1489b50d902SRodney W. Grimes(if
1499b50d902SRodney W. Grimes.Em ignoreeof
1509b50d902SRodney W. Grimesis not set) for the
1519b50d902SRodney W. GrimesC-shell,
1529b50d902SRodney W. Grimes.Xr csh 1 ) .
1539b50d902SRodney W. Grimes.Pp
1549b50d902SRodney W. GrimesCertain interactive commands, such as
1559b50d902SRodney W. Grimes.Xr vi 1 ,
1569b50d902SRodney W. Grimescreate garbage in the typescript file.
157e8937ba0SPhilippe CharnierThe
158e8937ba0SPhilippe Charnier.Nm
159e8937ba0SPhilippe Charnierutility works best with commands that do not manipulate the screen.
1602cb6b4efSBrian FeldmanThe results are meant to emulate a hardcopy terminal, not an addressable one.
1619b50d902SRodney W. Grimes.Sh ENVIRONMENT
162aa2e0334SDavid E. O'BrienThe following environment variables are utilized by
1638fe908efSRuslan Ermilov.Nm :
164d41149a8SMateusz Piotrowski.Bl -tag -width SCRIPT
1659b91846cSDavid E. O'Brien.It Ev SCRIPT
1669b91846cSDavid E. O'BrienThe
1679b91846cSDavid E. O'Brien.Ev SCRIPT
1689b91846cSDavid E. O'Brienenvironment variable is added to the sub-shell.
1699b91846cSDavid E. O'BrienIf
1709b91846cSDavid E. O'Brien.Ev SCRIPT
1719b91846cSDavid E. O'Brienalready existed in the users environment,
1729b91846cSDavid E. O'Brienits value is overwritten within the sub-shell.
1739b91846cSDavid E. O'BrienThe value of
1749b91846cSDavid E. O'Brien.Ev SCRIPT
1759b91846cSDavid E. O'Brienis the name of the
1769b91846cSDavid E. O'Brien.Ar typescript
1779b91846cSDavid E. O'Brienfile.
1789b50d902SRodney W. Grimes.It Ev SHELL
1799b50d902SRodney W. GrimesIf the variable
1809b50d902SRodney W. Grimes.Ev SHELL
1819b50d902SRodney W. Grimesexists, the shell forked by
182236d2f55SPhilippe Charnier.Nm
18387faa07bSSheldon Hearnwill be that shell.
18487faa07bSSheldon HearnIf
1859b50d902SRodney W. Grimes.Ev SHELL
1869b50d902SRodney W. Grimesis not set, the Bourne shell
1874e86fcacSSheldon Hearnis assumed.
188ef87c4dcSGlen Barber.Pq Most shells set this variable automatically .
1899b50d902SRodney W. Grimes.El
190d41149a8SMateusz Piotrowski.Sh EXAMPLES
191d41149a8SMateusz PiotrowskiRecord a simple
192d41149a8SMateusz Piotrowski.Xr csh 1
193d41149a8SMateusz Piotrowskisession with no additional details like input, output, and timestamping:
194d41149a8SMateusz Piotrowski.Bd -literal -offset indent
195d41149a8SMateusz Piotrowski$ SHELL=/bin/csh script
196d41149a8SMateusz PiotrowskiScript started, output file is typescript
197d41149a8SMateusz Piotrowski% date
198d41149a8SMateusz PiotrowskiTue Jan  5 15:08:10 UTC 2021
199d41149a8SMateusz Piotrowski% exit
200d41149a8SMateusz Piotrowskiexit
201d41149a8SMateusz Piotrowski
202d41149a8SMateusz PiotrowskiScript done, output file is typescript
203d41149a8SMateusz Piotrowski.Ed
204d41149a8SMateusz Piotrowski.Pp
205d41149a8SMateusz PiotrowskiNow, replay the session recorded in the previous example:
206d41149a8SMateusz Piotrowski.Bd -literal -offset indent
207d41149a8SMateusz Piotrowski$ cat ./typescript
208d41149a8SMateusz PiotrowskiScript started on Tue Jan  5 15:08:08 2021
209d41149a8SMateusz Piotrowski% date
210d41149a8SMateusz PiotrowskiTue Jan  5 15:08:10 UTC 2021
211d41149a8SMateusz Piotrowski% exit
212d41149a8SMateusz Piotrowskiexit
213d41149a8SMateusz Piotrowski
214d41149a8SMateusz PiotrowskiScript done on Tue Jan  5 15:08:13 2021
215d41149a8SMateusz Piotrowski.Ed
216d41149a8SMateusz Piotrowski.Pp
217d41149a8SMateusz PiotrowskiRecord a
218d41149a8SMateusz Piotrowski.Xr csh 1
219d41149a8SMateusz Piotrowskisession, but this time with additional details like timestamping:
220d41149a8SMateusz Piotrowski.Bd -literal -offset indent
221d41149a8SMateusz Piotrowski$ SHELL=/bin/csh script -r
222d41149a8SMateusz PiotrowskiScript started, output file is typescript
223d41149a8SMateusz Piotrowski% date
224d41149a8SMateusz PiotrowskiTue Jan  5 15:17:11 UTC 2021
225d41149a8SMateusz Piotrowski% exit
226d41149a8SMateusz Piotrowskiexit
227d41149a8SMateusz Piotrowski
228d41149a8SMateusz PiotrowskiScript done, output file is typescript
229d41149a8SMateusz Piotrowski.Ed
230d41149a8SMateusz Piotrowski.Pp
231d41149a8SMateusz PiotrowskiIn order to replay a sessions recorded with the
232d41149a8SMateusz Piotrowski.Fl r
233d41149a8SMateusz Piotrowskiflag, it is necessary to specify
234d41149a8SMateusz Piotrowski.Fl p
235d41149a8SMateusz Piotrowski.Po
236d41149a8SMateusz Piotrowski.Xr cat 1
237d41149a8SMateusz Piotrowskiwill not work because of all the aditional information stored in the session file
238d41149a8SMateusz Piotrowski.Pc .
239d41149a8SMateusz PiotrowskiAlso, let us use
240d41149a8SMateusz Piotrowski.Fl d
241d41149a8SMateusz Piotrowskito print the whole session at once:
242d41149a8SMateusz Piotrowski.Bd -literal -offset indent
243d41149a8SMateusz Piotrowski$ script -dp ./typescript
244d41149a8SMateusz PiotrowskiScript started on Tue Jan  5 15:17:09 2021
245d41149a8SMateusz Piotrowski% date
246d41149a8SMateusz PiotrowskiTue Jan  5 15:17:11 UTC 2021
247d41149a8SMateusz Piotrowski% exit
248d41149a8SMateusz Piotrowskiexit
249d41149a8SMateusz Piotrowski
250d41149a8SMateusz PiotrowskiScript done on Tue Jan  5 15:17:14 2021
251d41149a8SMateusz Piotrowski.Ed
2529b50d902SRodney W. Grimes.Sh SEE ALSO
253d7deff23SSergey Kandaurov.Xr csh 1
254ef87c4dcSGlen Barber.Po
255ef87c4dcSGlen Barberfor the
2569b50d902SRodney W. Grimes.Em history
257ef87c4dcSGlen Barbermechanism
258d7deff23SSergey Kandaurov.Pc ,
259d7deff23SSergey Kandaurov.Xr filemon 4
2609b50d902SRodney W. Grimes.Sh HISTORY
2619b50d902SRodney W. GrimesThe
262236d2f55SPhilippe Charnier.Nm
2639b50d902SRodney W. Grimescommand appeared in
2649b50d902SRodney W. Grimes.Bx 3.0 .
265df53360cSBrian Somers.Pp
266df53360cSBrian SomersThe
267df53360cSBrian Somers.Fl d ,
268df53360cSBrian Somers.Fl p
269df53360cSBrian Somersand
270df53360cSBrian Somers.Fl r
271df53360cSBrian Somersoptions first appeared in
272fabb5579SBrian Somers.Nx 2.0
273fabb5579SBrian Somersand were ported to
274c89bc700SDavid E. O'Brien.Fx 9.2 .
2759b50d902SRodney W. Grimes.Sh BUGS
276e8937ba0SPhilippe CharnierThe
277e8937ba0SPhilippe Charnier.Nm
278e8937ba0SPhilippe Charnierutility places
2799b50d902SRodney W. Grimes.Sy everything
2809b50d902SRodney W. Grimesin the log file, including linefeeds and backspaces.
2819b50d902SRodney W. GrimesThis is not what the naive user expects.
28251afb8dfSPeter Wemm.Pp
28351afb8dfSPeter WemmIt is not possible to specify a command without also naming the script file
28432c21313SSteve Pricebecause of argument parsing compatibility issues.
285e8eb82a8SPeter Wemm.Pp
286e8eb82a8SPeter WemmWhen running in
287e8eb82a8SPeter Wemm.Fl k
2886a3e8b0aSRuslan Ermilovmode, echo cancelling is far from ideal.
2896a3e8b0aSRuslan ErmilovThe slave terminal mode is checked
2906a3e8b0aSRuslan Ermilovfor ECHO mode to check when to avoid manual echo logging.
2916a3e8b0aSRuslan ErmilovThis does not
292ef87c4dcSGlen Barberwork when the terminal is in a raw mode where
293ef87c4dcSGlen Barberthe program being run is doing manual echo.
29429da7547SMikolaj Golub.Pp
295ef87c4dcSGlen BarberIf
29629da7547SMikolaj Golub.Nm
297ef87c4dcSGlen Barberreads zero bytes from the terminal, it switches to a mode when it
298ef87c4dcSGlen Barberonly attempts to read
299ef87c4dcSGlen Barberonce a second until there is data to read.
300ef87c4dcSGlen BarberThis prevents
30129da7547SMikolaj Golub.Nm
302ef87c4dcSGlen Barberfrom spinning on zero-byte reads, but might cause a 1-second delay in
303ef87c4dcSGlen Barberprocessing of user input.
304