script
何するコマンド?
書き方
script [オプション] [ファイル名]
オプション
| オプション | 説明 |
|---|---|
| -a | 内容をファイルの末尾に追加する(上書きしない) |
| -c 【コマンド】 | 【コマンド】の実行結果を記録する |
| -f | 操作内容をファイルに即時反映する(書き込むごとに出力内容をフラッシュする) Flush output after each write. This is nice for telecooperation: One person does ‘mkfifo foo; script -f foo’ and another can supervise real-time what is being done using ‘cat foo’. |
| -q | 開始、終了時のメッセージを表示しない&終了時のメッセージを表示しない |
| -t | タイミングデータを標準エラー出力に出力する。タイミングデータって何? Output timing data to standard error. This data 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. This information can be used to replay typescripts with realistic typing and output delays. |
補足事項
何も付けないで
script
を実行すると
Script started, file is typescript
というメッセージが表示されて記録が始まり、以降の画面に対する表示内容がすべて「typescript」という名前のファイルに記録されます。
この状態で、例えば「ls」コマンドを実行したとしましょう。
私の環境では以下の内容が画面上に表示されました。
# ls
test01 typescript
#
記録を終了したいときは
exit
を実行します。
そうすると
Script done, file is typescript
というメッセージが表示されて、表示内容の記録が終了します。
その後、ファイル「typescript」の中身を覗いてみると、以下の内容が記録されていました。
Script started on Fri 07 Nov 2014 11:11:50 AM JST
# ls
test01 typescript
# exit
exit
Script done on Fri 07 Nov 2014 11:15:33 AM JST
実行したコマンドと、その結果が記録されていますね。
ファイル名を指定しない場合は「typescript」という名前のファイルに記録されますが、任意のファイル名を指定することも可能です。
例えば
script hoge.txt
を実行すると、ファイル名が「hoge.txt」なファイルに記録されます。
これが「srcipt」コマンドの基本的な使い方です。
次に、オプションの使い方を見てみましょう。
オプション「-a」は上書きではなく追記するためのオプションです。
例えば
script
ls
exit
script
cd
exit
を順番に実行すると、ファイルには
Script started on Fri 07 Nov 2014 11:23:04 AM JST
# cd
# exit
exit
Script done on Fri 07 Nov 2014 11:23:07 AM JST
のように記録されます。
上書きされて、後に実行した方(「cd」コマンドを実行した方)のみ記録として残っています。
一方、2回目の「script」コマンドの実行に「-a」オプションを付けて
script
ls
exit
script -a
cd
exit
を順番に実行すると、ファイルには
Script started on Fri 07 Nov 2014 11:24:25 AM JST
# ls
test01 typescript
# exit
exit
Script done on Fri 07 Nov 2014 11:24:26 AM JST
Script started on Fri 07 Nov 2014 11:24:30 AM JST
# cd
# exit
exit
Script done on Fri 07 Nov 2014 11:24:32 AM JST
のように追記されます。
今度は、どちらの記録も残りました。
これが「-a」オプションです。
追記モードにしてくれます。
次にオプション「-c」です。
これはコマンドの実行結果をファイルに出力するためのオプションです。
例えば
script -c ls
を実行すると、画面には
Script started, file is typescript
test01 typescript
Script done, file is typescript
のように表示されます。
表示内容が記録されたファイル「typescript」の中身は以下の通りです。
Script started on Fri 07 Nov 2014 11:26:55 AM JST
test01 typescript
Script done on Fri 07 Nov 2014 11:26:55 AM JST
これは
script
ls
exit
を順番に実行したのと同じ結果です。
これが「-c」オプションです。
コマンドの実行結果を記録してくれます。
次にオプション「-f」です。
これは操作内容をファイルに即時反映するためのオプションです。
ちょっとややこしいので、順番に書いていきます。
頑張って付いてきてください。
まず下準備として、端末を2つ起動します。
次に1つ目の端末で
script
を実行して記録を開始します。
その後、2つ目の端末で
tail -f typescript
を実行して「script」コマンドで記録するファイルの内容を表示します。
ちなみに「tail」コマンドはファイルの最後の方を表示するときに使うコマンドです。
「-f」オプションはファイルに内容が追記されたらリアルタイムで表示するためのオプションです。
この状態で、1つ目の端末(「script」コマンドを実行した端末)で
ls
を実行してみてください。
2つ目の端末(「tail -f」コマンドを実行した端末)には変化がないはずです。
その後、1つ目の端末(「script」コマンドを実行した端末)で
exit
を実行します。
その瞬間、2つ目の端末(「tail -f」コマンドを実行した端末)に、記録された内容が一気に表示されます。
これが意味するところは
ファイルに記録されるのは「exit」された瞬間
ということです。
「script」コマンド実行中にファイルの中身を覗いても、中身は空のように見えます。
これが「-f」オプション未指定時の動きです。
さて、いよいよ「-f」オプションの登場です。
1つ目の端末で
script -f
を実行して記録を開始します。
次に、先程同様、2つ目の端末で
tail -f typescript
を実行して「script」コマンドで記録するファイルの内容を表示します。
この時点で、2つ目の端末には
Script started on Fri 07 Nov 2014 11:42:49 AM JST
のような記録開始メッセージが表示されるはずです。
この状態で、1つ目の端末(「script」コマンドを実行した端末)で
ls
を実行してみてください。
今度は、すぐに「ls」コマンドの実行結果が2つ目の端末に表示されるはずです。
これが意味するところは
ファイルに記録されるのはコマンドが実行された瞬間
ということです。
つまり即時反映を意味します。
これが「-f」オプションです。
指定することで、操作記録をファイルに即時反映してくれます。
次にオプション「-q」を見てみましょう。
これは開始、終了のメッセージを表示しないためのオプションです。
実際に
script -q
を実行すれば分かると思いますが、記録開始メッセージ
Script started, file is typescript
と記録終了メッセージ
Script done, file is typescript
が画面に表示されなくなります。
また、ファイルにも終了メッセージ
Script done on Fri 07 Nov 2014 11:49:32 AM JST
が記録されません。
ただし、開始メッセージ
Script started on Fri 07 Nov 2014 11:50:27 AM JST
だけは記録されます。
これが「-q」オプションです。
画面上への開始・終了メッセージの表示、ファイルへの終了メッセージの記録を止めます。
ファイルへの開始メッセージの記録だけはやります。
最後に「-t」オプションです。
……が、よく分からなかったので飛ばします。
試しに
script -t
を実行してみたところ、標準エラー出力に以下の内容が出力されました。
0.211711 14
0.039255 1
e5.132002 1
(以下略)
「なんじゃ?こりゃ」って感じですね。
何か分かったら追記しますが、多分そんな機会は訪れないでしょう。
