61171


**経緯**  
scriptコマンドで操作履歴を記録中にviコマンドを使用すると、操作履歴に制御コードが含まれており、`cat`で表示すると`cat`が異常終了(※)するように見えます。  
※ Tera
Termで実行するときの話です。WSL純正(?)のターミナルでは現象が変わります、ある程度は制御コードを無視してくれますが、一部の制御コードは残ります。  
(画面が乱れているので正確なところはわかりません)

**質問**  
viを操作したときも、scriptの記録結果(typescript)を確認できる方法はありませんか？  
コマンドは`script`でなくてもかまいません。

  * vi(vim)の出力する制御コードを無視(または除去)する方法  
※viの操作中の履歴はなくなってもかまいません。

  * 制御コードを記録しない方法、`ttyrec`コマンド等、他のコマンドでもかまいません。
  * ★vi(vim)のような端末の画面制御を行うコマンドの操作をきれいに再現(※)できる方法はありませんか。metropolisさんやfumiyasさんのコメントを参考にして私もいろいろ試してみます。  
※操作したときの画面の振る舞いを再生するようなイメージです。

**実行例**

[code]

    $ script
    スクリプトを開始しました。ファイルは typescript です
    vi qw.txt
    (base) ユーザ名@マシン名:~/work/w051_script$ vi qw.txt
    (base) ユーザ名@マシン名:~/work/w051_script$ exit
    exit
    スクリプトを終了しました。ファイルは typescript です
    
[/code]

viで入力したのは`ABC`の1行です。

**typescriptの内容**  
`od -Ax -c -x --endian=big ./typescript`

[code]

    000000 5363 7269 7074 2073 7461 7274 6564 206f
    000010 6e20 3230 3139 2d31 312d 3037 2031 383a
    000020 3239 3a31 362b 3039 3030 0a76 6920 7177
    000030 2e74 7874 0a28 6261 7365 2920 1b5d 303b
    000040 7075 7368 7075 6c6c 4073 3038 3230 316e
    000050 3230 3a20 7e2f 776f 726b 2f77 3035 315f
    000060 7363 7269 7074 0770 7573 6870 756c 6c40
    000070 7330 3832 3031 6e32 303a 7e2f 776f 726b
    000080 2f77 3035 315f 7363 7269 7074 2420 7669
    000090 2071 772e 7478 740a 1b5b 3f32 3030 3468
    0000a0 1b5b 3f31 3034 3968 1b5b 3232 3b30 3b30
    0000b0 741b 5b3f 3168 1b3d 1b5b 3f32 3030 3468
    0000c0 1b5b 313b 3235 721b 5b3f 3132 681b 5b3f
    0000d0 3132 6c1b 5b32 376d 1b5b 3233 6d1b 5b32
    0000e0 396d 1b5b 6d1b 5b48 1b5b 324a 1b5b 3f32
    0000f0 356c 1b5b 3235 3b31 4822 7177 2e74 7874
    000100 2220 5be6 96b0 e383 95e3 82a1 e382 a4e3
    000110 83ab 5d1b 5b32 3b31 48e2 96bd 1b5b 366e
    000120 1b5b 323b 3148 2020 1b5b 313b 3148 1b5b
    000130 3e63 1b5d 3130 3b3f 071b 5d31 313b 3f07
    000140 1b5b 313b 3148 1b5b 3333 6d20 2031 201b
    000150 5b6d 0d0a 1b5b 316d 1b5b 3334 6d7e 2020
    000160 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0001d0 2020 2020 2020 2020 2020 2020 201b 5b33
    0001e0 3b31 487e 2020 2020 2020 2020 2020 2020
    0001f0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000260 2020 201b 5b34 3b31 487e 2020 2020 2020
    000270 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0002e0 2020 2020 2020 2020 201b 5b35 3b31 487e
    0002f0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000360 2020 2020 2020 2020 2020 2020 2020 201b
    000370 5b36 3b31 487e 2020 2020 2020 2020 2020
    000380 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0003f0 2020 2020 201b 5b37 3b31 487e 2020 2020
    000400 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000470 2020 2020 2020 2020 2020 201b 5b38 3b31
    000480 487e 2020 2020 2020 2020 2020 2020 2020
    000490 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000500 201b 5b39 3b31 487e 2020 2020 2020 2020
    000510 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000580 2020 2020 2020 201b 5b31 303b 3148 7e20
    000590 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000600 2020 2020 2020 2020 2020 2020 2020 1b5b
    000610 3131 3b31 487e 2020 2020 2020 2020 2020
    000620 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000690 2020 2020 201b 5b31 323b 3148 7e20 2020
    0006a0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000710 2020 2020 2020 2020 2020 2020 1b5b 3133
    000720 3b31 487e 2020 2020 2020 2020 2020 2020
    000730 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0007a0 2020 201b 5b31 343b 3148 7e20 2020 2020
    0007b0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000820 2020 2020 2020 2020 2020 1b5b 3135 3b31
    000830 487e 2020 2020 2020 2020 2020 2020 2020
    000840 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0008b0 201b 5b31 363b 3148 7e20 2020 2020 2020
    0008c0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000930 2020 2020 2020 2020 1b5b 3137 3b31 487e
    000940 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0009b0 2020 2020 2020 2020 2020 2020 2020 201b
    0009c0 5b31 383b 3148 7e20 2020 2020 2020 2020
    0009d0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000a40 2020 2020 2020 1b5b 3139 3b31 487e 2020
    000a50 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000ac0 2020 2020 2020 2020 2020 2020 201b 5b32
    000ad0 303b 3148 7e20 2020 2020 2020 2020 2020
    000ae0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000b50 2020 2020 1b5b 3231 3b31 487e 2020 2020
    000b60 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000bd0 2020 2020 2020 2020 2020 201b 5b32 323b
    000be0 3148 7e20 2020 2020 2020 2020 2020 2020
    000bf0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000c60 2020 1b5b 3233 3b31 487e 2020 2020 2020
    000c70 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000ce0 2020 2020 2020 2020 201b 5b32 343b 3148
    000cf0 7e20 2020 2020 2020 2020 2020 2020 2020
    000d00 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000d70 1b5b 6d1b 5b32 353b 3131 3148 302c 302d
    000d80 311b 5b38 43e5 85a8 e381 a61b 5b31 3b35
    000d90 481b 5b3f 3235 681b 5b32 376d 1b5b 3233
    000da0 6d1b 5b32 396d 1b5b 6d1b 5b48 1b5b 324a
    000db0 1b5b 3f32 356c 1b5b 313b 3148 1b5b 3333
    000dc0 6d20 2031 201b 5b6d 0d0a 1b5b 316d 1b5b
    000dd0 3334 6d7e 2020 2020 2020 2020 2020 2020
    000de0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000e50 2020 201b 5b33 3b31 487e 2020 2020 2020
    000e60 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000ed0 2020 2020 2020 2020 201b 5b34 3b31 487e
    000ee0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000f50 2020 2020 2020 2020 2020 2020 2020 201b
    000f60 5b35 3b31 487e 2020 2020 2020 2020 2020
    000f70 2020 2020 2020 2020 2020 2020 2020 2020
    *
    000fe0 2020 2020 201b 5b36 3b31 487e 2020 2020
    000ff0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001060 2020 2020 2020 2020 2020 201b 5b37 3b31
    001070 487e 2020 2020 2020 2020 2020 2020 2020
    001080 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0010f0 201b 5b38 3b31 487e 2020 2020 2020 2020
    001100 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001170 2020 2020 2020 201b 5b39 3b31 487e 2020
    001180 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0011f0 2020 2020 2020 2020 2020 2020 201b 5b31
    001200 303b 3148 7e20 2020 2020 2020 2020 2020
    001210 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001280 2020 2020 1b5b 3131 3b31 487e 2020 2020
    001290 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001300 2020 2020 2020 2020 2020 201b 5b31 323b
    001310 3148 7e20 2020 2020 2020 2020 2020 2020
    001320 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001390 2020 1b5b 3133 3b31 487e 2020 2020 2020
    0013a0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001410 2020 2020 2020 2020 201b 5b31 343b 3148
    001420 7e20 2020 2020 2020 2020 2020 2020 2020
    001430 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0014a0 1b5b 3135 3b31 487e 2020 2020 2020 2020
    0014b0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001520 2020 2020 2020 201b 5b31 363b 3148 7e20
    001530 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0015a0 2020 2020 2020 2020 2020 2020 2020 1b5b
    0015b0 3137 3b31 487e 2020 2020 2020 2020 2020
    0015c0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001630 2020 2020 201b 5b31 383b 3148 7e20 2020
    001640 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0016b0 2020 2020 2020 2020 2020 2020 1b5b 3139
    0016c0 3b31 487e 2020 2020 2020 2020 2020 2020
    0016d0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001740 2020 201b 5b32 303b 3148 7e20 2020 2020
    001750 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0017c0 2020 2020 2020 2020 2020 1b5b 3231 3b31
    0017d0 487e 2020 2020 2020 2020 2020 2020 2020
    0017e0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001850 201b 5b32 323b 3148 7e20 2020 2020 2020
    001860 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0018d0 2020 2020 2020 2020 1b5b 3233 3b31 487e
    0018e0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001950 2020 2020 2020 2020 2020 2020 2020 201b
    001960 5b32 343b 3148 7e20 2020 2020 2020 2020
    001970 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0019e0 2020 2020 2020 1b5b 6d1b 5b32 353b 3131
    0019f0 3148 302c 302d 311b 5b38 43e5 85a8 e381
    001a00 a60d 2271 772e 7478 7422 205b e696 b0e3
    001a10 8395 e382 a1e3 82a4 e383 ab5d 1b5b 313b
    001a20 3548 1b50 2b71 3433 3666 1b5c 1b50 2b71
    001a30 3662 3735 1b5c 1b50 2b71 3662 3634 1b5c
    001a40 1b50 2b71 3662 3732 1b5c 1b50 2b71 3662
    001a50 3663 1b5c 1b50 2b71 3233 3332 1b5c 1b50
    001a60 2b71 3233 3334 1b5c 1b50 2b71 3235 3639
    001a70 1b5c 1b50 2b71 3261 3337 1b5c 1b50 2b71
    001a80 3662 3331 1b5c 1b50 2471 2071 1b5c 1b5b
    001a90 3f31 3224 701b 5b3f 3235 681b 5b32 376d
    001aa0 1b5b 3233 6d1b 5b32 396d 1b5b 6d1b 5b48
    001ab0 1b5b 324a 1b5b 3f32 356c 1b5b 313b 3148
    001ac0 1b5b 3338 3b35 3b31 3330 6d20 2031 201b
    001ad0 5b6d 0d0a 1b5b 3934 6d7e 2020 2020 2020
    001ae0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001b50 2020 2020 2020 2020 201b 5b33 3b31 487e
    001b60 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001bd0 2020 2020 2020 2020 2020 2020 2020 201b
    001be0 5b34 3b31 487e 2020 2020 2020 2020 2020
    001bf0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001c60 2020 2020 201b 5b35 3b31 487e 2020 2020
    001c70 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001ce0 2020 2020 2020 2020 2020 201b 5b36 3b31
    001cf0 487e 2020 2020 2020 2020 2020 2020 2020
    001d00 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001d70 201b 5b37 3b31 487e 2020 2020 2020 2020
    001d80 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001df0 2020 2020 2020 201b 5b38 3b31 487e 2020
    001e00 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001e70 2020 2020 2020 2020 2020 2020 201b 5b39
    001e80 3b31 487e 2020 2020 2020 2020 2020 2020
    001e90 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001f00 2020 201b 5b31 303b 3148 7e20 2020 2020
    001f10 2020 2020 2020 2020 2020 2020 2020 2020
    *
    001f80 2020 2020 2020 2020 2020 1b5b 3131 3b31
    001f90 487e 2020 2020 2020 2020 2020 2020 2020
    001fa0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002010 201b 5b31 323b 3148 7e20 2020 2020 2020
    002020 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002090 2020 2020 2020 2020 1b5b 3133 3b31 487e
    0020a0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002110 2020 2020 2020 2020 2020 2020 2020 201b
    002120 5b31 343b 3148 7e20 2020 2020 2020 2020
    002130 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0021a0 2020 2020 2020 1b5b 3135 3b31 487e 2020
    0021b0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002220 2020 2020 2020 2020 2020 2020 201b 5b31
    002230 363b 3148 7e20 2020 2020 2020 2020 2020
    002240 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0022b0 2020 2020 1b5b 3137 3b31 487e 2020 2020
    0022c0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002330 2020 2020 2020 2020 2020 201b 5b31 383b
    002340 3148 7e20 2020 2020 2020 2020 2020 2020
    002350 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0023c0 2020 1b5b 3139 3b31 487e 2020 2020 2020
    0023d0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002440 2020 2020 2020 2020 201b 5b32 303b 3148
    002450 7e20 2020 2020 2020 2020 2020 2020 2020
    002460 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0024d0 1b5b 3231 3b31 487e 2020 2020 2020 2020
    0024e0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002550 2020 2020 2020 201b 5b32 323b 3148 7e20
    002560 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0025d0 2020 2020 2020 2020 2020 2020 2020 1b5b
    0025e0 3233 3b31 487e 2020 2020 2020 2020 2020
    0025f0 2020 2020 2020 2020 2020 2020 2020 2020
    *
    002660 2020 2020 201b 5b32 343b 3148 7e20 2020
    002670 2020 2020 2020 2020 2020 2020 2020 2020
    *
    0026e0 2020 2020 2020 2020 2020 2020 1b5b 6d1b
    0026f0 5b32 353b 3131 3148 302c 302d 311b 5b38
    002700 43e5 85a8 e381 a60d 2271 772e 7478 7422
    002710 205b e696 b0e3 8395 e382 a1e3 82a4 e383
    002720 ab5d 1b5b 313b 3548 1b50 2b71 3662 3332
    002730 1b5c 1b50 2b71 3662 3333 1b5c 1b50 2b71
    002740 3662 3334 1b5c 1b50 2b71 3662 3335 1b5c
    002750 1b50 2b71 3662 3336 1b5c 1b50 2b71 3662
    002760 3337 1b5c 1b50 2b71 3662 3338 1b5c 1b50
    002770 2b71 3662 3339 1b5c 1b5b 3f32 3568 1b50
    002780 2b71 3662 3362 1b5c 1b50 2b71 3436 3331
    002790 1b5c 1b50 2b71 3436 3332 1b5c 1b50 2b71
    0027a0 3235 3331 1b5c 1b50 2b71 3236 3338 1b5c
    0027b0 1b50 2b71 3662 3632 1b5c 1b50 2b71 3662
    0027c0 3439 1b5c 1b50 2b71 3662 3434 1b5c 1b50
    0027d0 2b71 3662 3638 1b5c 1b50 2b71 3430 3337
    0027e0 1b5c 1b50 2b71 3662 3530 1b5c 1b50 2b71
    0027f0 3662 3465 1b5c 1b50 2b71 3462 3331 1b5c
    002800 1b50 2b71 3462 3333 1b5c 1b50 2b71 3462
    002810 3334 1b5c 1b50 2b71 3462 3335 1b5c 1b50
    002820 2b71 3662 3432 1b5c 1b5b 3f32 356c 1b5b
    002830 3235 3b31 481b 5b31 6d2d 2d20 e68c bfe5
    002840 85a5 202d 2d1b 5b6d 1b5b 3235 3b31 3148
    002850 1b5b 4b1b 5b32 353b 3131 3148 302c 311b
    002860 5b31 3043 e585 a8e3 81a6 1b5b 313b 3548
    002870 1b5b 3f32 3568 1b5b 3f32 356c 411b 5b32
    002880 353b 3131 3148 312c 321b 5b31 3b36 481b
    002890 5b3f 3235 681b 5b3f 3235 6c42 1b5b 3235
    0028a0 3b31 3133 4833 1b5b 313b 3748 1b5b 3f32
    0028b0 3568 1b5b 3f32 356c 431b 5b32 353b 3131
    0028c0 3348 341b 5b31 3b38 481b 5b3f 3235 681b
    0028d0 5b32 353b 3148 1b5b 4b1b 5b31 3b37 481b
    0028e0 5b3f 3235 6c1b 5b32 353b 3131 3148 312c
    0028f0 331b 5b31 3043 e585 a8e3 81a6 1b5b 313b
    002900 3748 1b5b 3f32 3568 1b5b 3f32 3030 346c
    002910 1b5b 3f32 356c 1b5b 3235 3b31 4822 7177
    002920 2e74 7874 221b 5b32 353b 3131 3148 1b5b
    002930 4b1b 5b32 353b 3130 485b e696 b05d 2031
    002940 4c2c 2034 4320 e69b b8e8 bebc e381 bf0d
    002950 0d0a 1b5b 3f32 3030 346c 1b5b 3f31 6c1b
    002960 3e1b 5b3f 3235 681b 5b3f 3130 3439 6c1b
    002970 5b32 333b 303b 3074 2862 6173 6529 201b
    002980 5d30 3b70 7573 6870 756c 6c40 7330 3832
    002990 3031 6e32 303a 207e 2f77 6f72 6b2f 7730
    0029a0 3531 5f73 6372 6970 7407 7075 7368 7075
    0029b0 6c6c 4073 3038 3230 316e 3230 3a7e 2f77
    0029c0 6f72 6b2f 7730 3531 5f73 6372 6970 7424
    0029d0 2065 7869 740a 6578 6974 0a0a 5363 7269
    0029e0 7074 2064 6f6e 6520 6f6e 2032 3031 392d
    0029f0 3131 2d30 3720 3138 3a32 393a 3534 2b30
    002a00 3930 300a
    002a04
    
[/code]

**環境**  
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jun 06 2019 17:31:41)適用済パッチ:
1-1453  
script from util-linux 2.31.1

* * *

**terminal**

[code]

    Tera Term Version 4.101(SVN# 7288)
    
[/code]

**scriptコマンドを実行した環境(その１)**

[code]

    script from util-linux 2.31.1
    
    NAME="Ubuntu"
    VERSION="18.04.3 LTS (Bionic Beaver)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 18.04.3 LTS"
    VERSION_ID="18.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=bionic
    UBUNTU_CODENAME=bionic
    
[/code]

* * *

**scriptコマンドを実行した環境(その２)**

[code]

    script (util-linux-ng 2.17.2)
    
    CentOS release 6.9 (Final)
    
[/code]

**scriptコマンドを実行した環境(その３)**

[code]

    script from util-linux 2.32.1
    
    CentOS Linux release 8.0.1905 (Core)
    
    
[/code]


CC BY-SA 4.0
2019-11-07T10:34:39.470
60326
2019-12-07T07:11:57.970
2019-12-07T07:11:57.970
35558
35558
question
linux vim
scriptコマンドなどの操作を記録するコマンドの実行中にviを操作しても、結果ファイルの中身を確認できる方法はありませんか


  * `strings typescript` あるいは `strings -a typescript` する。
  * `scriptreplay`(1) で再生する。(要タイミング情報ファイル)
  * `vim -b typescript` で開く。

あたりでどうでしょうか。


CC BY-SA 4.0
2019-11-08T04:46:18.427
60349
2019-11-08T04:46:18.427
3061
60326
answer


少し動きが変なところがありますが、解決しました。  
「応答」のある「制御シーケンス」を削除するようにしました。

応答があるシーケンスを見つけるたびに削除するといった力技で対処しました。  
まだ抜けがあると思いますが、概ね満足のいく結果となりました。

[code]

    #!/bin/bash
    # https://ttssh2.osdn.jp/manual/ja/about/ctrlseq.html
    ESC=$(echo -n -e "\x1b")
    DCS=${ESC}$(echo -n "P")
    CSI=${ESC}$(echo -n "\[")
    OSC=${ESC}$(echo -n "]")
    ST=${ESC}$(echo -n "\\\\")
    BEL=$(echo -n -e "\x07")
    sed '
    s/'${CSI}$(echo -n "5n")'//g                                    #DSR
    s/'${CSI}$(echo -n "6n")'//g                                    #DSR
    s/'${CSI}$(echo -n ">c")'//g                                    #DA2 (Secondary DA)
    s/'${CSI}$(echo -n "?[^\$][^\$]*\$p")'//g                       #DECRQM
    s/'${DCS}$(echo -n "\$q[^${ESC}][^${ESC}]*${ST}")'//g           #設定問い合わせ
    s/'${DCS}$(echo -n "+q[0-9a-fA-F][0-9a-fA-F]*${ST}")'//g        #Termcap/Terminfo文字列問い合わせ
    s/'${OSC}$(echo -n "10[^?][^?]*?${BEL}")'//g                    #VTウィンドウの文字色 設定問い合わせ。
    s/'${OSC}$(echo -n "11[^?][^?]*?${BEL}")'//g                    #VTウィンドウの背景色 設定問い合わせ。
    ' "$@"
[/code]

参考にしたのは[対応制御シーケンス](https://ttssh2.osdn.jp/manual/ja/about/ctrlseq.html)です。

以下はこれまでの経緯です。

* * *

* * *

自己回答です。

# `script`コマンドの既定の振る舞い

遅ればせながら[Man page of SCRIPT](https://linuxjm.osdn.jp/html/util-
linux/man1/script.1.html)を調べてみました。

[code]

    vi(1) のようなインタラクティブなコマンドでは、 typescript ファイルにゴミができることがある。
    
[/code]

とのことでした。

# エスケープシーケンス`ESC[6n`が原因

まだ解決には至っていませんが、除去すべきものの１つが分かりました。  
残念ながら除去しても現象が改善しません。きりがないので`^[`を別の文字に置換して無効化することにしました。

[16進数1b5b366e(※)を標準出力に書き込むと不可解な現象が発生する
※ESCシーケンス6nか？](https://ja.stackoverflow.com/questions/60371/16%E9%80%B2%E6%95%B01b5b366e-%E3%82%92%E6%A8%99%E6%BA%96%E5%87%BA%E5%8A%9B%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80%E3%81%A8%E4%B8%8D%E5%8F%AF%E8%A7%A3%E3%81%AA%E7%8F%BE%E8%B1%A1%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B-esc%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B96n%E3%81%8B)

# `^[`の無効化(別の文字に置換)による対処

次のフィルタをかけることで不可解な現象が起きることは回避できました。

[code]

    sed 's/^[/@^[@/g'
    
[/code]

`^[`は制御コードESC(0x1b)です。

# `1文字ずつ空白を付加して表示する

この方法でも不可解な現象が起きることは回避できました。

[code]

    sed 's/./& /g'
    
[/code]


CC BY-SA 4.0
2019-11-09T23:21:17.260
60378
2019-12-04T05:55:01.133
2019-12-04T05:55:01.133
35558
35558
60326
answer


`less -r ./typescript` で開くと良い気がします。


CC BY-SA 4.0
2019-11-11T16:23:26.277
60418
2019-11-11T16:23:26.277
5008
60326
answer


まず質問に対して質問を返す事になって申し訳無いのですが、この typescript はどのような環境で取りましたか?  
内容を確認しましたが、本来の script コマンドの出力では無いように見えます。  
おそらく、特殊な修正が入った script コマンドの出力か、ファイルの内容が壊れていると思われます。

# 異常終了する(ように見える)事について

>
> scriptコマンドで操作履歴を記録中にviコマンドを使用すると、操作履歴に制御コードが含まれており、`cat`で表示すると`cat`が異常終了(※)するように見えます。

誤解されているようですが、Tera Term で表示した時も途中で終了する事なく最後まで出力されています。  
おそらく Alternate Screen Buffer の動作が原因で正しく出力されていないように見えているのでしょう。

Alternate Screen Buffer というのは裏画面と例えるのが判りやすいでしょうか。  
Vim は起動時にこの裏画面に表示を切り替え、終了時に表画面に戻します。  
その為、Vim 終了時には編集中の内容が消えて起動前の表示状態に戻ります。  
どのような動作になるかは実際に Vim を起動して試して見るのが判りやすいと思います。

`cat typescript` した時にもこの裏画面への切り替えが行われています。  
`cat` が終了した時には表画面に戻っている為、

  * 裏画面に対して行われた Vim での編集画面の表示が行われていない(ように見える)  
⇒`cat` が異常終了した

という誤解をされたのだと思います。

Tera Term ではこの裏画面への切り替えを、表画面の退避/復元として実装しています。  
そして退避/復元時に元の表示内容をスクロールアウトさせています。  
その為 `cat typescript` で表示させた時も最終的な表示状態では Vim での編集画面は表示されませんが、Tera Term
の表示をスクロールバックさせれば編集中の表示内容を確認出来ます。

## Alternate Screen Buffer の無効化

前述したように Tera Term では通常は Alternate Screen Buffer
の切り替え時に元の表示内容がスクロールアウトされてスクロールバッファに保存されますが、

  * Alternate Screen Buffer の利用の仕方によってはスクロールアウトしない場合が有る

  * Tera Term 以外の端末での利用時にもスクロールアウトさせない物も有る

等の理由により、Alternate Screen Buffer を無効化したい場合も有るかもしれません。これには

  * `cat` での出力内容で Alternate Screen Buffer の部分を無効化する

  * Tera Term で Alternate Screen Buffer を無効化する

の二種類の対処方法が考えられます。

### cat 出力での無効化

Alternate Screen Buffer への切り替えの為の制御シーケンスには以下の物があります。

  * <ESC>[?47h
  * <ESC>[?1047h
  * <ESC>[?1049h

これらを Main Screen Buffer への切り替えシーケンス `<ESC>[?47l` に書き換えてやれば無効化できます。  
例えば sed で以下のようにすればいいでしょう。

[code]

    cat typescript | sed 's/\[?47h/[?47l/g;s/\[?104[79]h/[?47l/g'
    
[/code]

### Tera Term での無効化

Tera Term では Alternate Screen Buffer の利用を受け入れるか設定で変更できます。  
この設定は現在のところ設定ダイアログからは変更出来ない為、設定ファイルを直接書き換える必要があります。  
Tera Term で Alternate Screen Buffer を無視するようにするには TERATERM.INI
を以下のように書き換えて下さい。([参考](https://ttssh2.osdn.jp/manual/ja/setup/teraterm-
term.html#AltScr))

[code]

    AlternateScreenBuffer=off
    
[/code]

# cat 終了後のシェルへの入力

`cat` で typescript を表示した後、シェルのコマンドラインにゴミのような文字列が入力されたようになります。  
既に出ていますが、これは端末への問い合わせに対する応答です。

Vim は主に起動時に端末に対して様々な情報を問い合わせます。例えば例として挙げられている typescript では 41
回の問い合わせが行われています。これらの問い合わせはすべて typescript に含まれています。  
通常はこれらの問い合わせに対する応答を Vim が受け取って利用するのですが、`cat typescript` で表示した場合は `cat`
が応答を受け取らない為、シェルがその応答を受け取ってしまいます。  
この事自体は typescript の表示には影響しないのですが、シェルにゴミデータが入力されるのは望ましく無いので対処を行う方がいいでしょう。  
対処としてはまず「端末への問い合わせシーケンス」をすべて潰す事が考えられますが、前述したように Vim
は様々な問い合わせを行う為、これを行うのはかなり難しいでしょう。  
それよりは、

[code]

    cat typescript; cat > /dev/null
    
[/code]

のように端末からの応答を受け取って捨てる為の `cat` を起動して、すべて表示が終わってから Control-C で `cat`
を止めるのが簡単だと思います。

# 制御シーケンスの除去

>   * vi(vim)の出力する制御コードを無視(または除去)する方法  
>  ※viの操作中の履歴はなくなってもかまいません。
>

これには

  * cat を使う方法
  * Tera Term の機能を使う方法
  * 専用のプログラムを使う方法

が考えられます。

注意点としては、出力の再現では端末のサイズが重要な事が挙げられます。  
ログの再現性を上げるには、いずれの方法を使う場合でも端末サイズを typescript を取得した時の端末サイズに合わせる必要が有ります。

## cat を使う方法

他にプログラム等を導入する必要が無い為、一番手軽に行えるのがこの cat を使う方法だと思います。

手順は

  1. 端末のサイズを typescript を取得した時のサイズに合わせる
  2. cat typescript を実行する
  3. 端末の機能(マウスで選択するなど)で表示内容をコピーし、それを保存する

となります。

vi 等の「端末への問い合わせを行うプログラム」を使用している場合は、前述した「応答を捨てる為の cat を起動する」方法を使うのがいいでしょう。

vi での編集中の画面出力は、Tera Term を利用している場合は整形された状態でスクロールバッファに残り、xterm
等の使用時は出力がまったく残りません。  
xterm 等でも残るようにしたい場合は前述した Alternate Screen Buffer の無効化も併用してください。  
また Tera Term の出力は vi の画面出力の後ろにも vi の起動前のコマンドの出力が入る(復元される)ので、これが都合悪い場合も
Alternate Screen Buffer の無効化を行ってください。

この方法の注意点ですが、typescript 取得時に行われた tty での出力変換が cat での表示時に再度行われる為、typescript
の内容によっては表示が崩れる場合が有ります。

これを避けるには、

[code]

    stty -onlcr; cat typescript; stty onlcr; cat
    
[/code]

のようにして cat で表示している時の tty の設定を一時的に変えてやります。

しかしここで最初に書いた、添付されている typescript の問題が影響してきます。  
添付されている typescript を上記の方法で表示すると逆に出力がおかしくなってしまいます。  
これは「typescript の記録の仕方がおかしい」または「typescript が壊れている」という事なのですが、他の typescript
も同じような状況ならば上記の tty の設定を一時的に変える方法は使わずに直接 cat を使う方が出力が崩れなくなると思います。

## Tera Term の機能を使う方法

端末として Tera Term を使っている場合、かつ typescript がローカルに有る場合は Tera Term
の機能で内容を再現する事も出来ます。  
使い方は、メニューの [ファイル] - [ログを再生] で再生したい typescript を選択します。

この方法の利点は、端末への問い合わせの問題が発生しない(応答がすべて捨てられる)ため対策をする必要が無い事です。

この方法での出力は cat を使う方法で書いた tty の設定を一時的に変える方法相当なので、正しく記録された typescript
ならば再現性は高いです。しかし添付されている typescript では表示が崩れるので、他の typescript も同じならばこの方法は使えません。

## 専用のプログラムを使う方法

typescript 等の端末への出力をそのまま保存した物を整形したテキストに変換するプログラムとして
[termlog](https://github.com/ttdoda/termlog) という物が有ります。  
オリジナルは 20 年以上前に投稿された物で最近の Vim の出力に対応出来ていなかったので、Vim の出力を扱えるように手を入れてみました。  
ただ、古いプログラムゆえに UTF-8 が扱え無い為、以下のように一度 EUC-JP に変換してから処理を行い、結果を UTF-8 に戻す必要があります。

[code]

    iconv -f utf-8 -t euc-jp typescript.tty | termlog -g128x25 | iconv -f euc-jp -t utf-8 > typescript
    
[/code]

本当は UTF-8 に対応させてからこの回答を書こうとしていたのですが、しばらく時間が取れそうにないので取り合えずは EUC-JP
に変換して使ってみてください。  
時間が取れたら UTF-8 に対応させると思います。

また、添付されている typescript の場合は -n オプションも指定してください。

この termlog を使う方法の利点としては以下が挙げられます。

  * 端末への問い合わせシーケンスはすべて termlog で捨てられるので、他の方法のように端末からの応答を気にするような必要がない
  * 結果を直接ファイルに出力できるので、バッチ処理に向いている

# 制御シーケンスを記録しない方法

>   * 制御コードを記録しない方法、ttyrecコマンド等、他のコマンドでもかまいません。
>

これを行う方法はほとんど無いですね。  
一番近いと思うのが Tera Term のログ機能で、プレインテキストを指定した時でしょうか。

ただ、この方法はお勧め出来ません。  
制御シーケンスの部分を削除しても、テキストとして表示された部分が崩れた文字列として残る事になります。  
vi
の出力等はまとめて削除する事が出来ますが、シェルのコマンドライン編集を行った時はなんと入力したか非常に判りづらくなる上、正確に再現する事が出来なくなります。

それよりは記録する時には typescript や Tera Term のバイナリログのように制御シーケンスも含めてすべて記録しておき、それを前述した
termlog 等で整形する方が出力内容が判りやすくなると思います。

# 端末操作画面の再現

>   *
> ★vi(vim)のような端末の画面制御を行うコマンドの操作をきれいに再現(※)できる方法はありませんか。metropolisさんやfumiyasさんのコメントを参考にして私もいろいろ試してみます。  
>  ※操作したときの画面の振る舞いを再生するようなイメージです。
>

この再現(再生)というのは、時間も含めて再現するという事でしょうか?

時間は関係なく、端末の画面に表示された内容をそのままテキストにしたいという事ならば、script
コマンドで出力を保存して、制御シーケンスの除去で書いた方法、特に termlog を使うのがいいと思います。

時間も含めて再現する(操作している内容を眺めるような感じ)ならば、すでに他の方が書かれていますが scriptreplay や ttyrec があります。

個人的には以下の理由から ttyrec の方をお勧めしたいです。

  * データが1ファイルにまとまっているので管理しやすい
  * typescript 部分のみが欲しい時も簡単に取り出せる (後述)
  * この形式に対応しているプログラムがいくつか有る 
    * [ttygif](https://github.com/sugyan/ttygif) \- アニメーションGIFに変換する
    * [seq2gif](https://github.com/saitoha/seq2gif) \- これもアニメーションGIFへの変換
    * Tera Term プラグイン - 標準でインストールされ [ファイル] - [TTY Record], [TTY Replay] で使える

問題としては、端末への問い合わせシーケンスとの相性が悪い事が挙げられます。今回の要件的には致命的かも。  
これに関しても時間が取れたらパッチを作りたいと思っています。

scriptreplay
は個人的な印象でしか無いのですが、初めて触った時に日本語環境で取られたデータがうまく再生できないというバグを踏んだのであまりいい印象を持っていません。

## ttyrec ⇒ typescript 変換

ttyrec 形式のファイルから typescript 相当の部分を取り出すには ttyplay のノーウエィトモードが使えます。

[code]

    ttyplay -n filename.tty > typescript
    
[/code]


CC BY-SA 4.0
2019-12-06T11:45:43.833
61171
2019-12-06T11:45:43.833
2020-06-17T08:14:45.997
-1
12203
60326
answer