]> git.ipfire.org Git - thirdparty/util-linux.git/blame - term-utils/script.1.adoc
Merge branch 'lsfd--tty' of https://github.com/masatake/util-linux
[thirdparty/util-linux.git] / term-utils / script.1.adoc
CommitLineData
295b3979 1//po4a: entry man manual
6cac37e3
MB
2////
3Copyright (c) 1980, 1990 Regents of the University of California.
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions
8are met:
91. Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer.
112. Redistributions in binary form must reproduce the above copyright
12 notice, this list of conditions and the following disclaimer in the
13 documentation and/or other materials provided with the distribution.
143. All advertising materials mentioning features or use of this software
15 must display the following acknowledgement:
16 This product includes software developed by the University of
17 California, Berkeley and its contributors.
184. Neither the name of the University nor the names of its contributors
19 may be used to endorse or promote products derived from this software
20 without specific prior written permission.
21
22THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32SUCH DAMAGE.
33
34 @(#)script.1 6.5 (Berkeley) 7/27/91
35////
36= script(1)
37:doctype: manpage
f42ed819 38:man manual: User Commands
6cac37e3
MB
39:man source: util-linux {release-version}
40:page-layout: base
41:command: script
28f4f1a3 42:plus: +
6cac37e3
MB
43
44== NAME
45
46script - make typescript of terminal session
47
48== SYNOPSIS
49
4d297435 50*script* [options] [_file_]
6cac37e3
MB
51
52== DESCRIPTION
53
54*script* makes a typescript of everything on your terminal session. The terminal data are stored in raw form to the log file and information about timing to another (optional) structured log file. The timing log file is necessary to replay the session later by *scriptreplay*(1) and to store additional information about the session.
55
bd67ca44 56Since version 2.35, *script* supports multiple streams and allows the logging of input and output to separate files or all the one file. This version also supports a new timing file which records additional information. The command *scriptreplay --summary* then provides all the information.
6cac37e3
MB
57
58If the argument _file_ or option *--log-out* _file_ is given, *script* saves the dialogue in this _file_. If no filename is given, the dialogue is saved in the file _typescript_.
59
60Note that logging input using *--log-in* or *--log-io* may record security-sensitive information as the log file contains all terminal session input (e.g., passwords) independently of the terminal echo flag setting.
61
62== OPTIONS
63
64Below, the _size_ argument may be followed by the multiplicative suffixes KiB (=1024), MiB (=1024*1024), and so on for GiB, TiB, PiB, EiB, ZiB and YiB (the "iB" is optional, e.g., "K" has the same meaning as "KiB"), or the suffixes KB (=1000), MB (=1000*1000), and so on for GB, TB, PB, EB, ZB and YB.
65
66*-a*, *--append*::
28f4f1a3 67Append the output to _file_ or to _typescript_, retaining the prior contents.
6cac37e3
MB
68
69*-c*, *--command* _command_::
28f4f1a3 70Run the _command_ rather than an interactive shell. This makes it easy for a script to capture the output of a program that behaves differently when its stdout is not a tty.
6cac37e3
MB
71
72*-E*, *--echo* _when_::
28f4f1a3
MB
73This option controls the *ECHO* flag for the slave end of the session's pseudoterminal. The supported modes are _always_, _never_, or _auto_.
74+
75The default is _auto_ -- in this case, *ECHO* enabled for the pseudoterminal slave; if the current standard input is a terminal, *ECHO* is disabled for it to prevent double echo; if the current standard input is not a terminal (for example pipe: *echo date | script*) then keeping *ECHO* enabled for the pseudoterminal slave enables the standard input data to be viewed on screen while being recorded to session log simultaneously.
76+
77Note that 'never' mode affects content of the session output log, because users input is not repeated on output.
6cac37e3
MB
78
79*-e*, *--return*::
28f4f1a3
MB
80Return the exit status of the child process. Uses the same format as bash termination on signal termination (i.e., exit status is 128 {plus} the signal number). The exit status of the child process is always stored in the type script file too.
81//TRANSLATORS: Keep {plus} untranslated.
6cac37e3
MB
82
83*-f*, *--flush*::
bd67ca44 84Flush output after each write. This is nice for telecooperation: one person does *mkfifo* _foo_; *script -f* _foo_, and another can supervise in real-time what is being done using *cat* _foo_. Note that flush has an impact on performance; it's possible to use *SIGUSR1* to flush logs on demand.
6cac37e3
MB
85
86*--force*::
28f4f1a3 87Allow the default output file _typescript_ to be a hard or symbolic link. The command will follow a symbolic link.
6cac37e3
MB
88
89*-B*, *--log-io* _file_::
28f4f1a3 90Log input and output to the same _file_. Note, this option makes sense only if *--log-timing* is also specified, otherwise it's impossible to separate output and input streams from the log _file_.
6cac37e3
MB
91
92*-I*, *--log-in* _file_::
28f4f1a3
MB
93Log input to the _file_. The log output is disabled if only *--log-in* specified.
94+
95Use this logging functionality carefully as it logs all input, including input when terminal has disabled echo flag (for example, password inputs).
6cac37e3
MB
96
97*-O*, *--log-out* _file_::
28f4f1a3 98Log output to the _file_. The default is to log output to the file with name _typescript_ if the option *--log-out* or *--log-in* is not given. The log output is disabled if only *--log-in* specified.
6cac37e3
MB
99
100*-T*, *--log-timing* _file_::
28f4f1a3 101Log timing information to the _file_. Two timing file formats are supported now. The classic format is used when only one stream (input or output) logging is enabled. The multi-stream format is used on *--log-io* or when *--log-in* and *--log-out* are used together. See also *--logging-format*.
6cac37e3
MB
102
103*-m*, *--logging-format* _format_::
e7cce92e 104Force use of _advanced_ or _classic_ timing log format. The default is the classic format to log only output and the advanced format when input as well as output logging is requested.
9d745bbb
KZ
105+
106*Classic format*;;
e7cce92e 107The timing log contains two fields, separated by a space. The first field indicates how much time elapsed since the previous output. The second field indicates how many characters were output this time.
9d745bbb
KZ
108+
109*Advanced (multi-stream) format*;;
5462d443 110The first field is an entry type identifier ('I'nput, 'O'utput, 'H'eader, 'S'ignal). The second field is how much time elapsed since the previous entry, and the rest of the entry is type-specific data.
6cac37e3
MB
111
112*-o*, *--output-limit* _size_::
28f4f1a3 113Limit the size of the typescript and timing files to _size_ and stop the child process after this size is exceeded. The calculated file size does not include the start and done messages that the *script* command prepends and appends to the child process output. Due to buffering, the resulting output file might be larger than the specified value.
6cac37e3
MB
114
115*-q*, *--quiet*::
28f4f1a3 116Be quiet (do not write start and done messages to standard output).
6cac37e3
MB
117
118*-t*[_file_], *--timing*[=_file_]::
28f4f1a3 119Output timing data to standard error, or to _file_ when given. This option is deprecated in favour of *--log-timing* where the _file_ argument is not optional.
6cac37e3 120
2b2d3172 121include::man-common/help-version.adoc[]
6cac37e3
MB
122
123== SIGNALS
124
125Upon receiving *SIGUSR1*, *script* immediately flushes the output files.
126
127== ENVIRONMENT
128
129The following environment variable is utilized by *script*:
130
131*SHELL*::
28f4f1a3 132If the variable *SHELL* exists, the shell forked by *script* will be that shell. If *SHELL* is not set, the Bourne shell is assumed. (Most shells set this variable automatically).
6cac37e3
MB
133
134== NOTES
135
136The script ends when the forked shell exits (a _control-D_ for the Bourne shell (*sh*(1p)), and _exit_, _logout_ or _control-d_ (if _ignoreeof_ is not set) for the C-shell, *csh*(1)).
137
138Certain interactive commands, such as *vi*(1), create garbage in the typescript file. *script* works best with commands that do not manipulate the screen, the results are meant to emulate a hardcopy terminal.
139
544e64e0 140It is not recommended to run *script* in non-interactive shells. The inner shell of *script* is always interactive, and this could lead to unexpected results. If you use *script* in the shell initialization file, you have to avoid entering an infinite loop. You can use for example the *.profile* file, which is read by login shells only:
6cac37e3
MB
141
142....
143if test -t 0 ; then
144 script
145 exit
146fi
147....
148
149You should also avoid use of *script* in command pipes, as *script* can read more input than you would expect.
150
151== HISTORY
152
153The *script* command appeared in 3.0BSD.
154
155== BUGS
156
157*script* places _everything_ in the log file, including linefeeds and backspaces. This is not what the naive user expects.
158
159*script* is primarily designed for interactive terminal sessions. When stdin is not a terminal (for example: *echo foo | script*), then the session can hang, because the interactive shell within the script session misses EOF and *script* has no clue when to close the session. See the *NOTES* section for more information.
160
161== SEE ALSO
162
163*csh*(1) (for the _history_ mechanism),
164*scriptreplay*(1),
165*scriptlive*(1)
166
625e9c61 167include::man-common/bugreports.adoc[]
6cac37e3 168
625e9c61 169include::man-common/footer.adoc[]
6cac37e3
MB
170
171ifdef::translation[]
625e9c61 172include::man-common/translation.adoc[]
6cac37e3 173endif::[]