Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all 

名前
script - 端末セッションの忠実な記録を作成する
書式
script [options] [file]
バージョンについて
このマニュアルは、util-linux 2.36 所収の script コマンドのマニュアルである。script コマンドは util-linux 2.35 でかなり大幅な改訂が行われた。そのため、バージョン 2.34 以前の script では、このマニュアルで述べてい る機能やオプションに使えないものがあると思う。 バージョン 2.34 やそれ以前の script の動作やオプションにつ いては、 付属の英語マニュアルをご覧いただきたい。
説明
script は、端末セッションで行われるすべてについて忠実な記録 (タイプスクリプト、typescript) を作成する。端 末上のデータは、未加工のまま (in raw form) ログファイルに記録され、 タイミングに関する情報は、(作成す る、しないが任意の) 構造化された別のログファイルに記録される。このタイミングのログファイルは、後で scriptreplay(1) を使用して、セッションを再生するためにも、 またセッションに関する補足情報を記録するために も必要である。 バージョン 2.35 以降の script は、複数ストリームをサポートし、 入力と出力を別々のファイルに記録すること も、 両者を一つのファイルに記録することも可能になっている。 またそうしたバージョンでは、補足情報を記録す る新型のタイミングファイルも使用できる。 scriptreplay --summary というコマンドを使えば、そうした補足情報 のすべてを見ることができる。 引き数の file やオプションの --log-out file を指定すると、script はセッションのやり取りを file という名前 のファイルに記録する。ファイル名を指定しない場合は、セッションのやり取りを typescript というファイルに記 録することになる。 --log-in や --log-io を使って入力のログを取ると、セキュリティ的に危険な情報まで記録されることになるかもし れない。 端末のエコーフラグ (echo flag) の設定がどうなっていようと、 ログファイルに端末セッションにおける すべての入力が書き込まれるからである (たとえば、パスワードまでも)。
オプション
以下で使用する引き数 size の後ろには、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 も同様に使える。 -a, --append 出力を file や typescript に追加する。ファイルの既存の内容はそのまま保持される。 -c, --command command 対話シェルではなく、command を直接実行する。 そうすることで、標準出力が端末 (tty) ではない場合に動 作が違ったものになるプログラムの出力が、取り込みやすくなる。 -E, --echo when このオプションは、セッション中で使われる疑似端末の ECHO フラグを制御する。サポートされるモード は、always, never, auto である。デフォルトは auto であり、その場合は、目下の標準入力が端末ならば、 二重のエコーを避けるために、ECHO は抑止され、標準入力が端末でないならば (たとえば、echo date | script のように、標準入力がパイプの場合)、 セッションログに入力の記録漏れが起きないように、ECHO は 有効になる。 -e, --return 子プロセスの終了ステータスを返す (訳注: 詳しく言うと、script 上で最後に実行したプロセスの終了ス テータスを script の終了ステータスとして返すようにする)。 子プロセスがシグナルによって終了させられ たときの終了ステータスには、bash の場合と同じ形式を使用する (すなわち、「128 + シグナル番号」であ る)。 子プロセスのその終了ステータスは、タイプスクリプトファイルにも常に記録される。 -f, --flush 書き込みをするたびに出力をフラッシュする。 離れた場所で共同作業をしているとき、これは役に立つ。 片 方が `mkfifo foo; script -f foo' をすれば、もう一方は `cat foo' を使って、相手が何をやっているかリ アルタイムで監視できるわけである。 頻繁にフラッシュすると、パフォーマンスに影響が出ることに注意し ていただきたい。 SIGUSR1 シグナルを使って、オンデマンドでログをフラッシュすることもできる。 --force デフォルトの出力ファイル typescript がハードリンクやシンボリックリンクであってもよいことにする。す なわち、script コマンドがシンボリックをたどるようになる。 -B, --log-io file 入力と出力のログを同じファイル file に記録する。注意してほしいが、このオプションに意味があるの は、--log-timing オプションも一緒に指定した場合だけである。そうしないと、ログファイル file 中の出 力ストリームと入力ストリームを分離できないことになる。 -I, --log-in file 入力を file に記録する。--log-in だけを指定すると、出力のログは作成されないことになる。 このログ機能を使うときは、気を付けていただきたい。 端末でエコーフラグを「抑止」にしているときの入 力も含めて、すべての入力を記録するからである (たとえば、パスワードの入力も記録する)。 -O, --log-out file 出力を file に記録する。オプション --log-out や --log-in を指定しない場合、出力が記録されるの は、デフォルトでは typescript という名前のファイルである。--log-in だけを指定すると、出力のログは 作成されないことになる。 -T, --log-timing file タイミング情報を file に記録する。現在では、タイミングファイルに 2 種類のフォーマットが使用できる ようになっている。 classic (従来型) フォーマットは、(入力なり、出力なり) 片方のストリームのロギン グのみが有効になっている場合に使用される。 マルチストリーム型のフォーマットが使用されるの は、--log-io のときか、--log-in と --log-out が一緒に使われているときである。 --logging-format も 参照していただきたい。 [訳注] 次の --logging-format についても言えることだが、「デフォルトでは、--log-in さえ指定されて いれば、--log-out が指定されていないでも、advanced (新型) フォーマットが使用される」、と いうのが正確な説明のようだ。--log-in だけ指定するというのは、scriptlive での再実行を考えて いるのでないかぎり、意味のないことだが。 -m, --logging-format format タイミングファイルに強制的に advanced (新型) または classic (従来型) フォーマットを使用させる。 デ フォルトは、出力のみをログに記録する場合は、従来型であり、 入力と出力、両方のロギングが要求されて いる場合は、新型である。 classic フォーマット ログは、スペースで区切られた二つのフィールドからなる。 最初のフィールドは、前回の出力から経過した 時間を示し、2 番目のフィールドは、今回、何文字 (characters) 出力したかを示している。 advanced (multi-stream) フォーマット 最初のフィールドは、記載事項のタイプ識別子である ('I'nput, 'O'utput, 'H'eader, 'S'ignal)。2 番目の フィールドは、前回の記録から経過した時間。 そして、記載事項の残りの部分は、タイプ特有のデータであ る。 -o, --output-limit size タイプスクリプトファイルやタイミングファイルの上限を size までとし、そのサイズを越えたら、子プロセ スをストップする。 ファイルサイズの計算には、script コマンドが子プロセスの出力の前後に付ける開始や 終了のメッセージは入らない。 バッファリングのせいで、生成される出力ファイルが、指定した値より大き くなることがある。 -q, --quiet 寡黙モード (開始や終了のメッセージを標準出力に書き出さない)。 -t[file], --timing[=file] タイミングデータを標準エラーに出力する。file を指定した場合は、 タイミングデータの出力先がそのファ イルになる (訳注: 短いオプション -t とタイミングファイル名は、間に空白を入れず、続けて書かなければ ならない。 そうしないと、タイミングデータが標準エラーに出力されてしまう)。 このオプションは非推奨 であり、--log-timing の使用をお勧めする。 なお、--log-timing では、引き数 file の指定は任意ではな い (訳注: つまり、必須である)。 -V, --version バージョン情報を表示して終了する。 -h, --help ヘルプを表示して終了する。
シグナル
SIGUSR1 を受け取ると、script は直ちにバッファの内容を出力ファイルにフラッシュする。
環境変数
次の環境変数を script は利用する。 SHELL 環境変数 SHELL が存在すれば、script からフォークするシェルは、そのシェルになる。SHELL が設定されて いない場合は、Bourne シェルだと見なされる (ほとんどのシェルが、この変数を自動的に設定する)。
注意
script コマンドが記録を終えるのは、フォークしたシェルが終了するときである (Bourne シェル (sh(1p)) で は、control-D で終了する。C シェル (csh(1)) では、exit, logout、あるいは (ignoreeof が設定されていない場 合は) control-D で終了する)。 vi のような対話的なコマンドには、タイプスクリプトファイルにゴミを作るものがある。 script は、複雑な画面処 理をしないコマンドを使ったとき、一番うまく行く。 作成される記録は、ハードコピー端末 (訳注: スクリーンでは なく、紙に出力する端末。テレタイプがその一例) をエミュレートするようになっているのである。 script を非対話的シェルで動かすのは、お勧めできない。script の内側のシェルは、常に対話的であり、そのため 予期せぬ結果をもたらすかもしれないからだ。 もし、script をシェルの初期化ファイルで使用するのなら、 無限 ループに陥らないように気を付けなければならない。たとえば、以下のような .profile ファイルを使うことができ るが、これなら読み込むのは、ログインシェルだけになる。 if test -t 0 ; then script exit fi また、パイプを使ったコマンドで script を使うのも避けたほうがよい。 script が、ユーザの思っている以上に入 力を読み込むかもしれないからである。
歴史
script コマンドは 3.0BSD で登場した。
バグ
script は、ラインフィードやバックスペースも含めて、すべてをログファイルに書き込む。 これは、初心ユーザの 予想する動作ではないだろう。 script は、そもそも対話的な端末セッションを対象に設計されている。 そのため、標準入力が端末でないときは (たとえば、echo foo | script)、 セッションがハングするかもしれない。何故なら、script セッション内の対話的 シェルが EOF を受け取りそこなうと、script としては、いつセッションを閉じればよいのか、手がかりをつかめな いからである。 詳しくは、「注意」セクションをご覧になっていただきたい。
関連項目
csh(1) (history のメカニズムについて), scriptreplay(1), scriptlive(1)
入手方法
この script コマンドは、util-linux パッケージの一部であり、Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/> から入手できる。