docker-machine の env 設定が MacVim と競合する、らしい

docker-machine を使っている環境上で MacVim を起動すると、なぜか編集ウィンドウが開かない問題に遭遇したので、対応内容をメモ。

結論から言うと、 docker-machine の仮想マシン起動後に設定される各種環境変数(たとえば DOCKER_HOST )を自動設定するために .bash_profile の中に書いていた

if [ "$(docker-machine status myvm)" = "Running" ]; then
    eval "$(docker-machine env myvm)"
fi

の部分、特に eval "$(docker-machine env myvm)" が問題を引き起こしており、これを MacVim からの起動時だけ実行しないようにすることで解消した。具体的には、 MacVim から起動した時は TERM 環境変数が dumb となり、通常起動時の値とは異なっていることを利用して

if [ "$TERM" != "dumb" -a "$(docker-machine status myvm)" = "Running" ]; then
    eval "$(docker-machine env myvm)"
fi

とした。

具体的にこの行がダメな理由についてはよくわからない。 MacVim 自体のソースコードを追った結果、 MacVim は mvim コマンドを開くために内部的にログインシェルを開き、そこからコマンドを起動しているらしく、その流れで .bash_profile が読み込まれて実行されているようだったが、 eval 自体は同じ .bash_profile 中の他の部分でも使用しているので、直接それが問題のようには見えなかった。この辺りは機会があれば調べてみることに。