[Mac]

ExecutionString / 2006-08-12 (土)

  Terminal.app の設定情報は Default Database に記録されます。Default Database はそれぞれのアプリの UI 以外にも、defaults コマンドで参照することができます。(なお、この Default Database の内容はテキストもしくはバイナリの PropertyList 形式で Library/Preferences 以下にありますが、これは実装依存の話ですので、エディタなどで直接参照、編集すべきではありません。)

さて、通常UI にない項目でも、この defaults コマンドを使えば設定することができます。世間にある隠し設定などは、要するに参照はするけど設定UI のない項目を Default Database に書き込むことで有効になっているものです。

そんな隠し設定の一つが、Terminal の ExecutionString です。例えば、

defaults write com.apple.Terminal ExecutionString "env TZ=Japan date"
とターミナルから入力すると、それ以降、ターミナルウィンドウを開く度に「env TZ=Japan date」が実行されます。この ExecutionString 設定は、ターミナルウィンドウを開いた後にあsも「このように入力した」かのごとく処理されます。(つまり、シェルの入力受付前に実行される .tcshrc とかは先に処理されます。)

ここで困ったことに、いくつかのツールは勝手にこの ExecutionString を設定してしまいます。で、今回問題になったのは「そのコマンド; exit」なる文字列を設定してしまっており、そのコマンドの対話入力を終わらせると exit が実行され終わってしまう、というものです(--;

逆に、そういうトラブルの相談をされたので、気がついた次第です。

これは別に NDA でも何でもないのでメモ代わりに。

...