【Mac】ターミナル操作をログに残す方法

f:id:hira98:20190529092814p:plain

【結論】

  • 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秒

日付フォーマットの詳細については、以下の記事を参考下さい。

hydrocul.github.io

ターミナル起動時にコマンドを実行する方法

ターミナルの環境設定を開きます。

f:id:hira98:20190529092832p:plain

プロファイルウィンドウが開くので、(1)プロファイル→(2)シェル→(3)"コマンドを実行"にチェックを入れる→(4)入力欄に"実行したいコマンド"を入力します。

f:id:hira98:20190529092841p:plain

ログを保存するためのコマンドの例

ログ保存コマンドの例を以下に示します。

dateコマンドでのタイムスタンプ取得部分は、文字列と区別するために、グレイヴ・アクセント`)記号で囲む必要があります。

script ~/log/terminal/`date "+%Y-%m-%d_%H%M%S"`.log

上記コマンドをターミナル起動時に実行するように設定することで、自動でターミナル操作をログに残すことができます。

ただし上記コマンドの場合、ログを残すのはターミナルでexitコマンドを実行した時か、[Ctrl+D]でscriptプロセスを停止した時です。それ以外の操作(ターミナルのバツアイコン押下で閉じたり、強制終了等)ではログが残らないので注意が必要です。

おまけ

ターミナルをバツアイコンで閉じるとログが残らないのは不便なので、どうにかできないか調べた奮闘記録です。

scriptコマンドはUNIX系で使えるコマンドです。

script【コマンド】とは

コンピュータさんに対する命令文(コマンド)のひとつ であり

操作内容(端末の入出力)を記録するときに使うコマンド です。

引用:「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

上記サイトを見ていると、-fオプションをつけることで、「操作内容をファイルに即時反映する」と記載がありました。

そこで、Mac環境で-fオプションをつけてscriptコマンドを実行してみると、

-adkpqrオプションしか対応してないと怒られました。

$ script -f test.log
script: illegal option -- f
usage: script [-adkpqr] [-t time] [file [command ...]]

念の為、manコマンドでscriptコマンドのオプション確かめてみました。

$ man script

以下はオプション説明部の翻訳結果です。

f:id:hira98:20190529092900p:plain

-adkpqrオプション以外に-fオプションも説明あります。が、使えません😭😭

(マニュアルを日本語化したくて、色々いじった時に変なマニュアルを入れてしまったのかもしれないです。。)

参考情報

[Tool] Mac標準コマンドで出来る!ターミナルの出力結果をテキストファイルにも保存する方法

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

date コマンド

最後に

ターミナルのログをもっとスマートに残せる方法を知っている人がいたら教えて欲しいです🥺