【Mac】ターミナル操作をログに残す方法
【結論】
script
コマンドでターミナル操作をログに残せる。date
コマンドでタイムスタンプを取得できる。- ターミナルには、起動時にコマンドを自動実行する機能がある。
- 上記3つを用いることで、ターミナル操作のログを自動で残せる。
- ただし、Mac標準の
script
コマンドは-f(即時反映)
非対応なので、バツアイコンでターミナル終了するとログが残らないので使いづらい。
【目次】
ターミナル操作をファイルに残す方法
script
コマンドを実行することで、以降のターミナル操作をファイルに残すことができます。
$ script "ファイル名"
書き出し中はbash-3.2$
と表示されます。(※1)
書き出し中にexit
コマンド実行で書き出しを終了できます。
(※1)3.2はbashのバージョンを表します。(bash --version
で確認可能)
タイムスタンプを取得する方法
タイムスタンプはdate
コマンドで取得可能です。
% date 2019年 5月28日 火曜日 17時48分18秒 JST
%で始まる日付フォーマットを指定することで、任意のフォーマットで取得することも可能です。
# 現在の年を取得 $ date "+%Y" 2019 # 現在の月と日を取得 $ date "+%m月%d日" 05月28日 # 現在の時分秒を取得 $ date "+%H時%M分%S秒" 17時53分27秒
日付フォーマットの詳細については、以下の記事を参考下さい。
ターミナル起動時にコマンドを実行する方法
ターミナルの環境設定を開きます。
プロファイルウィンドウが開くので、(1)プロファイル→(2)シェル→(3)"コマンドを実行"にチェックを入れる→(4)入力欄に"実行したいコマンド"を入力します。
ログを保存するためのコマンドの例
ログ保存コマンドの例を以下に示します。
dateコマンドでのタイムスタンプ取得部分は、文字列と区別するために、グレイヴ・アクセント(`)記号で囲む必要があります。
script ~/log/terminal/`date "+%Y-%m-%d_%H%M%S"`.log
上記コマンドをターミナル起動時に実行するように設定することで、自動でターミナル操作をログに残すことができます。
ただし上記コマンドの場合、ログを残すのはターミナルでexit
コマンドを実行した時か、[Ctrl
+D
]でscript
プロセスを停止した時です。それ以外の操作(ターミナルのバツアイコン押下で閉じたり、強制終了等)ではログが残らないので注意が必要です。
おまけ
ターミナルをバツアイコンで閉じるとログが残らないのは不便なので、どうにかできないか調べた奮闘記録です。
scriptコマンドはUNIX系で使えるコマンドです。
script【コマンド】とは
コンピュータさんに対する命令文(コマンド)のひとつ であり
操作内容(端末の入出力)を記録するときに使うコマンド です。
上記サイトを見ていると、-f
オプションをつけることで、「操作内容をファイルに即時反映する」と記載がありました。
そこで、Mac環境で-f
オプションをつけてscript
コマンドを実行してみると、
-adkpqr
オプションしか対応してないと怒られました。
$ script -f test.log script: illegal option -- f usage: script [-adkpqr] [-t time] [file [command ...]]
念の為、manコマンドでscriptコマンドのオプション確かめてみました。
$ man script
以下はオプション説明部の翻訳結果です。
-adkpqr
オプション以外に-f
オプションも説明あります。が、使えません😭😭
(マニュアルを日本語化したくて、色々いじった時に変なマニュアルを入れてしまったのかもしれないです。。)
参考情報
[Tool] Mac標準コマンドで出来る!ターミナルの出力結果をテキストファイルにも保存する方法
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
最後に
ターミナルのログをもっとスマートに残せる方法を知っている人がいたら教えて欲しいです🥺