※ この記事は Mermaid を使用しています。
script -a -f <FILE_PATH>
script -a -F <FILE_PATH>
オプション | つけた場合の挙動 | つけなかった場合の挙動 |
---|---|---|
-a |
既存のファイルに内容を追記する | 既存のファイルの内容を上書きする (削除する) |
-f -F |
ターミナルの出力がすぐにファイルに記録される | exit や Ctrl-D で script コマンドを終了するまでは記録されない |
ttyplay
コマンドを使ってログを再現することができるsudo apt -y install ttyrec
brew install ttyrec
ttyrec -a <FILE_PATH>
オプション | つけた場合の挙動 | つけなかった場合の挙動 |
---|---|---|
-a |
既存のファイルに内容を追記する | 既存のファイルの内容を上書きする (削除する) |
Ubuntu Server 20.04 には標準でインストールされていたが、インストールされていなかった場合は以下のコマンドを実行する。
sudo apt -y install screen
筆者の環境ではすでにインストールされていたが、インストールされていなかった場合は以下のコマンドを実行する。
brew install screen
$HOME/.screenrc
に logfile "<FILE_PATH>"
と deflog on
を記述するlogfile "<FILE_PATH>"
deflog on
screen
Ubuntu Server 20.04 には標準でインストールされていたが、インストールされていなかった場合は以下のコマンドを実行する。
sudo apt -y install tmux
brew install tmux
tmux
tmux pipe-pane "cat >> <FILE_PATH>"
<FILE_PATH>
に該当するディレクトリが存在しない場合はログが記録されないので要注意
pipe-pane
とは別に capture-pane
というものもある。
しかしこれはログを自動的に記録するものではなく、capture-pane
を実行したときに、すでに画面に出力されているログのみをファイルに記録するというもの。
その代わり、制御文字を含めずに記録することができるので、特定のタイミングでのみ手動で記録する用途には向いているかもしれない。
Command
+ ,
で Preferences を開くProfiles
-> Session
-> Miscellaneous
に行くAutomatically log session input to files in
にチェックを入れるChange
ボタンを押し、ログを記録するディレクトリを指定するLog plain text
にチェックを入れる以下のリンク先のようなシェルスクリプトを .bashrc
や .zshrc
などに記述すれば OK1。
大まかなロジックは以下のとおり。
exit
したあとは) すぐさまシェルを終了するflowchart TD
step1{ログインセッションが script や tmux かどうか}
step1_yes[すでに起動済みなので何もしない]
step2{SSH 接続先かどうか}
step2_yes[何もしない]
step3{tmux かどうか}
step3_yes[tmux を起動]
step4{ログを記録するディレクトリがあるか}
step4_no[ディレクトリを作成する]
step5[ログの記録を開始]
step6[シェルの終了]
step1 -- Yes --> step1_yes
step1 -- No --> step2
step2 -- Yes --> step2_yes
step2 -- No --> step3
step3 -- Yes --> step3_yes --> step4
step3 -- No --> step4
step4 -- Yes --> step5
step4 -- No --> step4_no --> step5
step5 -- script や tmux を終了した場合 --> step6
SESSION_LOG_PATH
には、ログを記録するパスからファイル名を除いたものを格納しておく
$HOME/.log/tmux
pipe-pane
を実行しないといけないので script コマンドとは少し処理が異なるが、ベースは同じという感じで、どれも一長一短という感じ。
BSD 実装 (macOS) の script コマンドにバグがなければこれが一番シンプルかつ汎用的だなと思ったのだが……2。Mac を使わない人 (Ubuntu や WSL2 などを使う人) なら関係ないから良いのかも。でも制御文字を含めずにログを記録したいなら一工夫必要かも。