xref: /freebsd/usr.bin/script/script.1 (revision d41149a8e9cbb76ff89322a3363299f1b93823d2)
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