※2018/01/10(水)更新: 原因と解決方法が判明しました。末尾に情報を追加しましたのでそちらを参考にしてください。
macOSでは仮想化ソフトとして「VMware Fusion」を利用しています。
ところが最新版の「VMware Fusion 10」にアップグレードしたところ、ターミナルのパスがおかしくなる現象に気がつきました。
例えばbrewコマンドを実行すると以下のようなメッセージが表示されるのです。
$ brew
env: Fusion.app/Contents/Public:/usr/local/share/dotnet:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/sora/.swiftenv/shims:/Users/sora/.swiftenv/bin: No such file or directory
どうやらPATH環境変数がおかしくなっていて、おかしくしているのはVMware Fusionが影響しているようなのです。
今回はこの問題を解決する方法を説明します。ただし完全には解決出来ず、問題が残ってしまうため暫定版としたいと思います。
暫定案: com.vmware.fusion.publicを修正
検索してみたところ以下のような情報が見つかりました。
macOSでは「path_helper」というユーティリティが導入されていて、システムワイドのパス設定には「/etc/paths.d」の下に含まれる設定ファイルが読み込まれる模様。
今回の場合「/etc/paths.d/com.vmware.fusion.public」が作られていました。
この内容が以下の通りになっています。
/Applications/VMware Fusion.app/Contents/Public
スペース(空白)がエスケープされずPATHに含まれこれが問題を引き起こしているため、以下のように修正するととりあえず問題は解決します。
"/Applications/VMware Fusion.app/Contents/Public"
修正する場合root権限が必要で、かつread-onlyになっているのを解除する必要があります。
ところがこれで問題解決とはなりません。
この変更を行った直後はたしかに問題が解決しているのですが、VMware Fusionを起動しなおすごとにcom.vmware.fusion.publicが元の内容に置き換わってしまうのです。
根本的な解決にはVMware Fusion側の修正が必要かもしれません。
完全版解決作: brew doctor対策があだとなった
その後VMware Fusionが10.1.1までアップデートしても問題が解決しないため、自分の環境がおかしいのではないかと考えさらに調査をすすめました。
「/etc/paths.d/com.vmware.fusion.public」で設定されるパス「/Applications/VMware Fusion.app/Contents/Public」に空白が含まれていても問題が発生しない設定が普通ではないかと思ったからです。
結論から描くとこれが正解で.zshrcでbrewに設定していた以下のエイリアスが問題でした。
修正前:
alias brew="env PATH=${PATH/\/Users\/sora\/\.pyenv\/shims:/} brew"
修正後(PATH=のあとをダブルクォートで囲む):
alias brew="env PATH=\"${PATH/\/Users\/sora\/\.pyenv\/shims:/}\" brew"
元々このエイリアスはpyenvをインストールした際に表示される「brew doctor」の警告を無理矢理無効化するものです。
コマンド実行前にenvを利用して$PATHから「/Users/sora/.pyenv/shims:」を削除しているのですが、$PATHに「/Applications/VMware Fusion.app/Contents/Public」が含まれていると、スペースを含む$PATH文字列がコマンドラインそのまま展開されてしまいエラーになるのです。
これを解決するためにダブルクォートで全体を囲みます。
なお.zshrcによるPATHの設定自体は問題がありませんでした。
export PATH=/opt/local/bin:$PATH
この場合$PATHをダブルクォートで囲む必要はありません(もちろん囲ってもエラーにはならないのですが)。
まとめ
VMware Fusion 10は、空白を含むパスをシステムに追加します。正しく扱えば問題ありませんが、上記のようなエイリアスを利用しているとエラーになることもあります。困っていた方はご参考までに。