65310


scriptコマンドで生成したログファイルを開くと文字化けしてしまいます  
文字化けせずに展開する方法を教えていただけないでしょうか？

**ログファイル作成手順**

[code]

    $ script -q ~/sample.log
    
    bash-3.2$ cd sample
    bash-3.2$ ls
    ec.log
    bash-3.2$ cd ..
    bash-3.2$ exit
    exit
    
[/code]

**catコマンドでのログファイルの確認**

[code]

    $ cat sample.log
    
    bash-3.2$ cd sample
    bash-3.2$ ls
    ec.log
    bash-3.2$ cd ..
    bash-3.2$ exit
    exit
    
[/code]

catコマンドでは文字化けしませんが、実際にsample.logファイルを開くと下記のように文字化けします

**実際にログファイルを展開**

[code]

    [?1034hbash-3.2$ ls[K[Kcd sample
    bash-3.2$ ls
    ec.log
    bash-3.2$ cd ..
    bash-3.2$ exit
    exit
    
[/code]

**動作環境**  
macOS Catalina v10.15.3


CC BY-SA 4.0
2020-04-02T10:33:20.333
65306
2020-04-02T13:49:06.567
2020-04-02T13:41:30.763
19110
34550
question
linux macos 文字化け filesystems
scriptコマンドで生成したログファイルを文字化けせずに開きたい


「実際にsample.logファイルを開くと」の部分はエディタか何かで開いたのでしょうか。

まずこの文字列についてですが、これは文字列エンコードの違いによって起こるいわゆる「文字化け」ではありません。[エスケープシーケンス](https://en.wikipedia.org/wiki/ANSI_escape_code)まで記録されているだけです。`cat`
コマンドで出力した場合、エスケープシーケンスをターミナルが解釈して出力するため無いように見えますが、エスケープシーケンスを解釈しないエディタで開くと文字として見えます。

この文字列を記録したくない場合、それぞれ不完全ですがいくつか対策が考えられます。

  1. コマンド側がなるべくエスケープシーケンスを出力しないようにする。エスケープシーケンスは典型的にはターミナル出力に色を付けたいときに使います。`$PS1` を弄ったりですね。この設定を無くせば色については出なくなります。また `$TERM` を弄ってターミナルが色に対応していないことにして抑制する方法もあります。ただし `ESC[K` など色以外のエスケープシーケンスもあるので完璧ではないです。
  2. ログファイルに含まれるエスケープシーケンスを後から除去する。正規表現で除去したり、[`ansi2txt`](http://manpages.ubuntu.com/manpages/bionic/man1/ansi2txt.1.html) などのコマンドで除去したりする方法があります。ただし `ESC[K` のように単にエスケープシーケンスだけ削除しても意味が分からなくなる場合もあります。

参考

  * [How to clean up output of linux 'script' command](https://superuser.com/q/236930) \-- superuser
  * [Garbage in bash session log file. (using script command)](https://unix.stackexchange.com/q/215905/211480) \-- Unix & Linux
  * [Removing control chars (including console codes / colours) from script output](https://unix.stackexchange.com/q/14684/211480) \-- Unix & Linux


CC BY-SA 4.0
2020-04-02T13:49:06.567
65310
2020-04-02T13:49:06.567
19110
65306
answer