xref: /freebsd/usr.bin/script/script.1 (revision d6b92ffa)
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 December 4, 2013
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 adfkpqr
40.Op Fl F Ar pipe
41.Op Fl t Ar time
42.Op Ar file Op Ar command ...
43.Sh DESCRIPTION
44The
45.Nm
46utility makes a typescript of everything printed on your terminal.
47It is useful for students who need a hardcopy record of an interactive
48session as proof of an assignment, as the typescript file
49can be printed out later with
50.Xr lpr 1 .
51.Pp
52If the argument
53.Ar file
54is given,
55.Nm
56saves all dialogue in
57.Ar file .
58If no file name is given, the typescript is saved in the file
59.Pa typescript .
60.Pp
61If the argument
62.Ar command
63is given,
64.Nm
65will run the specified command with an optional argument vector
66instead of an interactive shell.
67.Pp
68The following options are available:
69.Bl -tag -width indent
70.It Fl a
71Append the output to
72.Ar file
73or
74.Pa typescript ,
75retaining the prior contents.
76.It Fl d
77When playing back a session with the
78.Fl p
79flag, do not sleep between records when playing back a timestamped session.
80.It Fl F Ar pipe
81Immediately flush output after each write.
82This will allow a user to create a named pipe using
83.Xr mkfifo 1
84and another user may watch the live session using a utility like
85.Xr cat 1 .
86.It Fl f
87Create
88.Ar file.filemon
89or
90.Pa typescript.filemon
91using
92.Xr filemon 4 .
93.It Fl k
94Log keys sent to the program as well as output.
95.It Fl p
96Play back a session recorded with the
97.Fl r
98flag in real time.
99.It Fl q
100Run in quiet mode, omit the start, stop and command status messages.
101.It Fl r
102Record a session with input, output, and timestamping.
103.It Fl t Ar time
104Specify the interval at which the script output file will be flushed
105to disk, in seconds.
106A value of 0
107causes
108.Nm
109to flush after every character I/O event.
110The default interval is
11130 seconds.
112.El
113.Pp
114The script ends when the forked shell (or command) exits (a
115.Em control-D
116to exit
117the Bourne shell
118.Pf ( Xr sh 1 ) ,
119and
120.Em exit ,
121.Em logout
122or
123.Em control-D
124(if
125.Em ignoreeof
126is not set) for the
127C-shell,
128.Xr csh 1 ) .
129.Pp
130Certain interactive commands, such as
131.Xr vi 1 ,
132create garbage in the typescript file.
133The
134.Nm
135utility works best with commands that do not manipulate the screen.
136The results are meant to emulate a hardcopy terminal, not an addressable one.
137.Sh ENVIRONMENT
138The following environment variables are utilized by
139.Nm :
140.Bl -tag -width SHELL
141.It Ev SCRIPT
142The
143.Ev SCRIPT
144environment variable is added to the sub-shell.
145If
146.Ev SCRIPT
147already existed in the users environment,
148its value is overwritten within the sub-shell.
149The value of
150.Ev SCRIPT
151is the name of the
152.Ar typescript
153file.
154.It Ev SHELL
155If the variable
156.Ev SHELL
157exists, the shell forked by
158.Nm
159will be that shell.
160If
161.Ev SHELL
162is not set, the Bourne shell
163is assumed.
164.Pq Most shells set this variable automatically .
165.El
166.Sh SEE ALSO
167.Xr csh 1
168.Po
169for the
170.Em history
171mechanism
172.Pc ,
173.Xr filemon 4
174.Sh HISTORY
175The
176.Nm
177command appeared in
178.Bx 3.0 .
179.Pp
180The
181.Fl d ,
182.Fl p
183and
184.Fl r
185options first appeared in
186.Nx 2.0
187and were ported to
188.Fx 9.2 .
189.Sh BUGS
190The
191.Nm
192utility places
193.Sy everything
194in the log file, including linefeeds and backspaces.
195This is not what the naive user expects.
196.Pp
197It is not possible to specify a command without also naming the script file
198because of argument parsing compatibility issues.
199.Pp
200When running in
201.Fl k
202mode, echo cancelling is far from ideal.
203The slave terminal mode is checked
204for ECHO mode to check when to avoid manual echo logging.
205This does not
206work when the terminal is in a raw mode where
207the program being run is doing manual echo.
208.Pp
209If
210.Nm
211reads zero bytes from the terminal, it switches to a mode when it
212only attempts to read
213once a second until there is data to read.
214This prevents
215.Nm
216from spinning on zero-byte reads, but might cause a 1-second delay in
217processing of user input.
218