xref: /freebsd/usr.bin/script/script.1 (revision f7c32ed617858bcd22f8d1b03199099d50125721)
1.\" Copyright (c) 1980, 1990, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. Neither the name of the University nor the names of its contributors
13.\"    may be used to endorse or promote products derived from this software
14.\"    without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.\"	@(#)script.1	8.1 (Berkeley) 6/6/93
29.\" $FreeBSD$
30.\"
31.Dd January 5, 2021
32.Dt SCRIPT 1
33.Os
34.Sh NAME
35.Nm script
36.Nd make typescript of terminal session
37.Sh SYNOPSIS
38.Nm
39.Op Fl aefkqr
40.Op Fl F Ar pipe
41.Op Fl t Ar time
42.Op Ar file Op Ar command ...
43.Nm
44.Fl p
45.Op Fl deq
46.Op Ar file
47.Sh DESCRIPTION
48The
49.Nm
50utility makes a typescript of everything printed on your terminal.
51It is useful for students who need a hardcopy record of an interactive
52session as proof of an assignment, as the typescript file
53can be printed out later with
54.Xr lpr 1 .
55.Pp
56If the argument
57.Ar file
58is given,
59.Nm
60saves all dialogue in
61.Ar file .
62If no file name is given, the typescript is saved in the file
63.Pa typescript .
64.Pp
65If the argument
66.Ar command
67is given,
68.Nm
69will run the specified command with an optional argument vector
70instead of an interactive shell.
71.Pp
72The following options are available:
73.Bl -tag -width "-F pipe"
74.It Fl a
75Append the output to
76.Ar file
77or
78.Pa typescript ,
79retaining the prior contents.
80.It Fl d
81When playing back a session with the
82.Fl p
83flag, do not sleep between records when playing back a timestamped session.
84.It Fl e
85Accepted for compatibility with
86.Em util-linux
87.Nm .
88The child command exit status is always the exit status of
89.Nm .
90.It Fl F Ar pipe
91Immediately flush output after each write.
92This will allow a user to create a named pipe using
93.Xr mkfifo 1
94and another user may watch the live session using a utility like
95.Xr cat 1 .
96.It Fl f
97Create
98.Ar file.filemon
99or
100.Pa typescript.filemon
101using
102.Xr filemon 4 .
103.It Fl k
104Log keys sent to the program as well as output.
105.It Fl p
106Play back a session recorded with the
107.Fl r
108flag in real time.
109.It Fl q
110Run in quiet mode, omit the start, stop and command status messages.
111.It Fl r
112Record a session with input, output, and timestamping.
113.It Fl t Ar time
114Specify the interval at which the script output file will be flushed
115to disk, in seconds.
116A value of 0
117causes
118.Nm
119to flush after every character I/O event.
120The default interval is
12130 seconds.
122.El
123.Pp
124The script ends when the forked shell (or command) exits (a
125.Em control-D
126to exit
127the Bourne shell
128.Pf ( Xr sh 1 ) ,
129and
130.Em exit ,
131.Em logout
132or
133.Em control-D
134(if
135.Em ignoreeof
136is not set) for the
137C-shell,
138.Xr csh 1 ) .
139.Pp
140Certain interactive commands, such as
141.Xr vi 1 ,
142create garbage in the typescript file.
143The
144.Nm
145utility works best with commands that do not manipulate the screen.
146The results are meant to emulate a hardcopy terminal, not an addressable one.
147.Sh ENVIRONMENT
148The following environment variables are utilized by
149.Nm :
150.Bl -tag -width SCRIPT
151.It Ev SCRIPT
152The
153.Ev SCRIPT
154environment variable is added to the sub-shell.
155If
156.Ev SCRIPT
157already existed in the users environment,
158its value is overwritten within the sub-shell.
159The value of
160.Ev SCRIPT
161is the name of the
162.Ar typescript
163file.
164.It Ev SHELL
165If the variable
166.Ev SHELL
167exists, the shell forked by
168.Nm
169will be that shell.
170If
171.Ev SHELL
172is not set, the Bourne shell
173is assumed.
174.Pq Most shells set this variable automatically .
175.El
176.Sh EXAMPLES
177Record a simple
178.Xr csh 1
179session with no additional details like input, output, and timestamping:
180.Bd -literal -offset indent
181$ SHELL=/bin/csh script
182Script started, output file is typescript
183% date
184Tue Jan  5 15:08:10 UTC 2021
185% exit
186exit
187
188Script done, output file is typescript
189.Ed
190.Pp
191Now, replay the session recorded in the previous example:
192.Bd -literal -offset indent
193$ cat ./typescript
194Script started on Tue Jan  5 15:08:08 2021
195% date
196Tue Jan  5 15:08:10 UTC 2021
197% exit
198exit
199
200Script done on Tue Jan  5 15:08:13 2021
201.Ed
202.Pp
203Record a
204.Xr csh 1
205session, but this time with additional details like timestamping:
206.Bd -literal -offset indent
207$ SHELL=/bin/csh script -r
208Script started, output file is typescript
209% date
210Tue Jan  5 15:17:11 UTC 2021
211% exit
212exit
213
214Script done, output file is typescript
215.Ed
216.Pp
217In order to replay a sessions recorded with the
218.Fl r
219flag, it is necessary to specify
220.Fl p
221.Po
222.Xr cat 1
223will not work because of all the aditional information stored in the session file
224.Pc .
225Also, let us use
226.Fl d
227to print the whole session at once:
228.Bd -literal -offset indent
229$ script -dp ./typescript
230Script started on Tue Jan  5 15:17:09 2021
231% date
232Tue Jan  5 15:17:11 UTC 2021
233% exit
234exit
235
236Script done on Tue Jan  5 15:17:14 2021
237.Ed
238.Sh SEE ALSO
239.Xr csh 1
240.Po
241for the
242.Em history
243mechanism
244.Pc ,
245.Xr filemon 4
246.Sh HISTORY
247The
248.Nm
249command appeared in
250.Bx 3.0 .
251.Pp
252The
253.Fl d ,
254.Fl p
255and
256.Fl r
257options first appeared in
258.Nx 2.0
259and were ported to
260.Fx 9.2 .
261.Sh BUGS
262The
263.Nm
264utility places
265.Sy everything
266in the log file, including linefeeds and backspaces.
267This is not what the naive user expects.
268.Pp
269It is not possible to specify a command without also naming the script file
270because of argument parsing compatibility issues.
271.Pp
272When running in
273.Fl k
274mode, echo cancelling is far from ideal.
275The slave terminal mode is checked
276for ECHO mode to check when to avoid manual echo logging.
277This does not
278work when the terminal is in a raw mode where
279the program being run is doing manual echo.
280.Pp
281If
282.Nm
283reads zero bytes from the terminal, it switches to a mode when it
284only attempts to read
285once a second until there is data to read.
286This prevents
287.Nm
288from spinning on zero-byte reads, but might cause a 1-second delay in
289processing of user input.
290