.\" Copyright (c) 1980, 1990 Regents of the University of California. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)script.1 6.5 (Berkeley) 7/27/91 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 1999 NAKANO Takeo .\" and 2001 Yuichi SATO .\" and 2020 Yoichi Chonan, .\" all rights reserved. .\" Translated Thu 14 Oct 1999 by NAKANO Takeo .\" Updated Tue Jan 9 18:33:39 JST 2001 .\" by Yuichi SATO .\" Updated Sat Nov 17 15:27:01 JST 2001 .\" by Yuichi SATO .\" Updated & Modified Sat May 1 17:38:44 JST 2004 .\" by Yuichi SATO .\" Updated & Modified (util-linux 2.36) Sun Nov 15 10:54:22 JST 2020 .\" by Yuichi SATO .\" and Yoichi Chonan .\" .TH SCRIPT 1 "October 2019" util\-linux "User Commands" .SH 名前 script \- 端末セッションの忠実な記録を作成する .SH 書式 \fBscript\fP [options] [\fIfile\fP] .SH バージョンについて このマニュアルは、util-linux 2.36 所収の \fBscript\fP コマンドのマニュアルである。\fBscript\fP コマンドは util-linux 2.35 でかなり大幅な改訂が行われた。そのため、バージョン 2.34 以前の \fBscript\fP では、このマニュアルで述べている機能やオプションに使えないものがあると思う。 バージョン 2.34 やそれ以前の \fBscript\fP の動作やオプションについては、 付属の英語マニュアルをご覧いただきたい。 .SH 説明 \fBscript\fP は、端末セッションで行われるすべてについて忠実な記録 (タイプスクリプト、typescript) を作成する。端末上のデータは、未加工のまま (in raw form) ログファイルに記録され、 タイミングに関する情報は、(作成する、しないが任意の) 構造化された別のログファイルに記録される。このタイミングのログファイルは、後で \fBscriptreplay\fP(1) を使用して、セッションを再生するためにも、 またセッションに関する補足情報を記録するためにも必要である。 .PP バージョン 2.35 以降の \fBscript\fP は、複数ストリームをサポートし、 入力と出力を別々のファイルに記録することも、 両者を一つのファイルに記録することも可能になっている。 またそうしたバージョンでは、補足情報を記録する新型のタイミングファイルも使用できる。 \fBscriptreplay \-\-summary\fP というコマンドを使えば、そうした補足情報のすべてを見ることができる。 .PP 引き数の \fIfile\fP やオプションの \fB\-\-log\-out\fP \fIfile\fP を指定すると、\fBscript\fP はセッションのやり取りを \fIfile\fP という名前のファイルに記録する。ファイル名を指定しない場合は、セッションのやり取りを \fItypescript\fP というファイルに記録することになる。 .PP \fB\-\-log\-in\fP や \fB\-\-log\-io\fP を使って入力のログを取ると、セキュリティ的に危険な情報まで記録されることになるかもしれない。 端末のエコーフラグ (echo flag) の設定がどうなっていようと、 ログファイルに端末セッションにおけるすべての入力が書き込まれるからである (たとえば、パスワードまでも)。 .SH オプション 以下で使用する引き数 \fIsize\fP の後ろには、KiB (=1024), MiB (=1024*1024) のような乗数を表す接尾辞を付けることができる。GiB, TiB, PiB, EiB, ZiB, YiB も同様に使える ("iB" を続けるのは任意であり、たとえば、"K" は "KiB" と同じ意味である)。また、KB (=1000), MB (=1000*1000) のような接尾辞を付けてもよい。GB, TB, PB, EB, ZB, YB も同様に使える。 .TP \fB\-a\fP, \fB\-\-append\fP 出力を \fIfile\fP や \fItypescript\fP に追加する。ファイルの既存の内容はそのまま保持される。 .TP \fB\-c\fP, \fB\-\-command\fP \fIcommand\fP 対話シェルではなく、\fIcommand\fP を直接実行する。 そうすることで、標準出力が端末 (tty) ではない場合に動作が違ったものになるプログラムの出力が、取り込みやすくなる。 .TP \fB\-E\fP, \fB\-\-echo\fP \fIwhen\fP このオプションは、セッション中で使われる疑似端末の ECHO フラグを制御する。サポートされるモードは、\fIalways\fP, \fInever\fP, \fIauto\fP である。デフォルトは \fIauto\fP であり、その場合は、目下の標準入力が端末ならば、 二重のエコーを避けるために、ECHO は抑止され、標準入力が端末でないならば (たとえば、\fBecho date | script\fP のように、標準入力がパイプの場合)、 セッションログに入力の記録漏れが起きないように、ECHO は有効になる。 .TP \fB\-e\fP, \fB\-\-return\fP 子プロセスの終了ステータスを返す (訳注: 詳しく言うと、\fBscript\fP 上で最後に実行したプロセスの終了ステータスを \fBscript\fP の終了ステータスとして返すようにする)。 子プロセスがシグナルによって終了させられたときの終了ステータスには、bash の場合と同じ形式を使用する (すなわち、「128 + シグナル番号」である)。 子プロセスのその終了ステータスは、タイプスクリプトファイルにも常に記録される。 .TP \fB\-f\fP, \fB\-\-flush\fP 書き込みをするたびに出力をフラッシュする。 離れた場所で共同作業をしているとき、これは役に立つ。 片方が `mkfifo foo; script \-f foo' をすれば、もう一方は `cat foo' を使って、相手が何をやっているかリアルタイムで監視できるわけである。 頻繁にフラッシュすると、パフォーマンスに影響が出ることに注意していただきたい。 SIGUSR1 シグナルを使って、オンデマンドでログをフラッシュすることもできる。 .TP \fB\-\-force\fP デフォルトの出力ファイル \fItypescript\fP がハードリンクやシンボリックリンクであってもよいことにする。すなわち、\fBscript\fP コマンドがシンボリックをたどるようになる。 .TP \fB\-B\fP, \fB\-\-log\-io\fP \fIfile\fP 入力と出力のログを同じファイル \fIfile\fP に記録する。注意してほしいが、このオプションに意味があるのは、\fB\-\-log\-timing\fP オプションも一緒に指定した場合だけである。そうしないと、ログファイル \fIfile\fP 中の出力ストリームと入力ストリームを分離できないことになる。 .TP \fB\-I\fP, \fB\-\-log\-in\fP \fIfile\fP 入力を \fIfile\fP に記録する。\fB\-\-log\-in\fP だけを指定すると、出力のログは作成されないことになる。 .sp このログ機能を使うときは、気を付けていただきたい。 端末でエコーフラグを「抑止」にしているときの入力も含めて、すべての入力を記録するからである (たとえば、パスワードの入力も記録する)。 .TP \fB\-O\fP, \fB\-\-log\-out\fP \fIfile\fP 出力を \fIfile\fP に記録する。オプション \fB\-\-log\-out\fP や \fB\-\-log\-in\fP を指定しない場合、出力が記録されるのは、デフォルトでは \fItypescript\fP という名前のファイルである。\fB\-\-log\-in\fP だけを指定すると、出力のログは作成されないことになる。 .TP \fB\-T\fP, \fB\-\-log\-timing\fP \fIfile\fP タイミング情報を \fIfile\fP に記録する。現在では、タイミングファイルに 2 種類のフォーマットが使用できるようになっている。 classic (従来型) フォーマットは、(入力なり、出力なり) 片方のストリームのロギングのみが有効になっている場合に使用される。 マルチストリーム型のフォーマットが使用されるのは、\fB\-\-log\-io\fP のときか、\fB\-\-log\-in\fP と \fB\-\-log\-out\fP が一緒に使われているときである。 \fB\-\-logging\-format\fP も参照していただきたい。 .RS .IP "[\fB訳注\fP]" 8 次の \fB\-\-logging\-format\fP についても言えることだが、「デフォルトでは、\fB\-\-log\-in\fP さえ指定されていれば、\fB\-\-log\-out\fP  が指定されていないでも、\fIadvanced\fP (新型) フォーマットが使用される」、というのが正確な説明のようだ。\fB\-\-log\-in\fP だけ指定するというのは、\fBscriptlive\fP での再実行を考えているのでないかぎり、意味のないことだが。 .RE .TP \fB\-m\fP, \fB\-\-logging\-format\fP \fIformat\fP タイミングファイルに強制的に \fIadvanced\fP (新型) または \fIclassic\fP (従来型) フォーマットを使用させる。 デフォルトは、出力のみをログに記録する場合は、従来型であり、 入力と出力、両方のロギングが要求されている場合は、新型である。 .sp .RS \fBclassic フォーマット\fP .PP ログは、スペースで区切られた二つのフィールドからなる。 最初のフィールドは、前回の出力から経過した時間を示し、2 番目のフィールドは、今回、何文字 (characters) 出力したかを示している。 .sp \fBadvanced (multi\-stream) フォーマット\fP .PP 最初のフィールドは、記載事項のタイプ識別子である ('I'nput, 'O'utput, 'H'eader, 'S'ignal)。2 番目のフィールドは、前回の記録から経過した時間。 そして、記載事項の残りの部分は、タイプ特有のデータである。 .RE .TP \fB\-o\fP, \fB\-\-output\-limit\fP \fIsize\fP タイプスクリプトファイルやタイミングファイルの上限を \fIsize\fP までとし、そのサイズを越えたら、子プロセスをストップする。 ファイルサイズの計算には、\fBscript\fP コマンドが子プロセスの出力の前後に付ける開始や終了のメッセージは入らない。 バッファリングのせいで、生成される出力ファイルが、指定した値より大きくなることがある。 .TP \fB\-q\fP, \fB\-\-quiet\fP 寡黙モード (開始や終了のメッセージを標準出力に書き出さない)。 .TP \fB\-t\fP[\fIfile\fP], \fB\-\-timing\fP[=\fIfile\fP] タイミングデータを標準エラーに出力する。\fIfile\fP を指定した場合は、 タイミングデータの出力先がそのファイルになる (訳注: 短いオプション \fB\-t\fP とタイミングファイル名は、間に空白を入れず、続けて書かなければならない。 そうしないと、タイミングデータが標準エラーに出力されてしまう)。 このオプションは非推奨であり、\fB\-\-log\-timing\fP の使用をお勧めする。 なお、\fB\-\-log\-timing\fP では、引き数 \fIfile\fP の指定は任意ではない (訳注: つまり、必須である)。 .TP \fB\-V\fP, \fB\-\-version\fP バージョン情報を表示して終了する。 .TP \fB\-h\fP, \fB\-\-help\fP ヘルプを表示して終了する。 .SH シグナル \fBSIGUSR1\fP を受け取ると、\fBscript\fP は直ちにバッファの内容を出力ファイルにフラッシュする。 .SH 環境変数 次の環境変数を \fBscript\fP は利用する。 .TP \fBSHELL\fP 環境変数 \fBSHELL\fP が存在すれば、\fBscript\fP からフォークするシェルは、そのシェルになる。\fBSHELL\fP が設定されていない場合は、Bourne シェルだと見なされる (ほとんどのシェルが、この変数を自動的に設定する)。 .SH 注意 script コマンドが記録を終えるのは、フォークしたシェルが終了するときである (Bourne シェル (\fBsh\fP(1p)) では、\fIcontrol\-D\fP で終了する。C シェル (\fBcsh\fP(1)) では、\fIexit\fP, \fIlogout\fP、あるいは (\fIignoreeof\fP が設定されていない場合は) \fIcontrol\-D\fP で終了する)。 .PP \fBvi\fP のような対話的なコマンドには、タイプスクリプトファイルにゴミを作るものがある。 \fBscript\fP は、複雑な画面処理をしないコマンドを使ったとき、一番うまく行く。 作成される記録は、ハードコピー端末 (訳注: スクリーンではなく、紙に出力する端末。テレタイプがその一例) をエミュレートするようになっているのである。 .PP \fBscript\fP を非対話的シェルで動かすのは、お勧めできない。\fBscript\fP の内側のシェルは、常に対話的であり、そのため予期せぬ結果をもたらすかもしれないからだ。 もし、\fBscript\fP をシェルの初期化ファイルで使用するのなら、 無限ループに陥らないように気を付けなければならない。たとえば、以下のような \fB\%.profile\fP ファイルを使うことができるが、これなら読み込むのは、ログインシェルだけになる。 .sp .na .RS .nf if test \-t 0 ; then script exit fi .fi .RE .ad .PP また、パイプを使ったコマンドで \fBscript\fP を使うのも避けたほうがよい。 \fBscript\fP が、ユーザの思っている以上に入力を読み込むかもしれないからである。 .SH 歴史 \fBscript\fP コマンドは 3.0BSD で登場した。 .SH バグ \fBscript\fP は、ラインフィードやバックスペースも含めて、\fIすべて\fPをログファイルに書き込む。 これは、初心ユーザの予想する動作ではないだろう。 .PP \fBscript\fP は、そもそも対話的な端末セッションを対象に設計されている。 そのため、標準入力が端末でないときは (たとえば、\fBecho foo | script\fP)、 セッションがハングするかもしれない。何故なら、script セッション内の対話的シェルが EOF を受け取りそこなうと、\fBscript\fP としては、いつセッションを閉じればよいのか、手がかりをつかめないからである。 詳しくは、「\fB注意\fP」セクションをご覧になっていただきたい。 .SH 関連項目 \fBcsh\fP(1) (\fIhistory\fP のメカニズムについて), \fBscriptreplay\fP(1), \fBscriptlive\fP(1) .SH 入手方法 この script コマンドは、util\-linux パッケージの一部であり、Linux Kernel Archive から入手できる。