xcode-select 的默认值为 /Applications/Xcode.app/Contents/Developer
之前不知道乱改,无意中将默认值改成了 /Applications/Xcode.app
用了一段时间后我还没发现有什么改变
直到今天我再 Versions 里面对比代码变更的时候才发现,点不开 FileMerge.app
(Versions.app 是通过 /usr/bin/opendiff 来间接调用 FileMerge.app 的)
命令行提示信息为:
Error: Can't run /Applications/Xcode.app/usr/bin/opendiff (no such file).
我在网上搜了很久都没有找到相关的信息,可能这种情况出现的却是比较少吧~
之前 sublime text 2 调用 ctags 插件时差不多也是这样的情况,
我当时是直接修改 ctags 插件中的 ctags.py 文件才弄好的,
仔细想来,其实和这里的问题如出一辙,
因为由之前 ctags 的经验,我很快的检查了一下 /usr/bin 目录,
发现这个目录中是存在 opendiff 可执行文件的,
然后再控制台键入 which opendiff 和 whereis opendiff 命令,
反馈的结果都指向为 /usr/bin/opendiff
这样的话,情况就很明了了,百分百是路径拼接的问题
但就为何 /usr/bin/opendif 前面被追加了一个 “/Applications/Xcode.app” 我也是百思不得其解,
xcode-select 是我无意间想到的一个命令,怎么说呢,就像第六感吧,
结果问题还真出在这里,他有 -h, -print-path, -switch 这几个最常用的命令
我试着用 -print-path 打印了一下它的指向,并在同事的机器上也试了了一下,
发现我这里果然存在猫腻,正常同事电脑里面是 /Applications/Xcode.app/Contents/Developer
而我不正常的电脑里则是 /Applications/Xcode.app
我用 xcode-select -swtich 命令切换到 /Applications/Xcode.app/Contents/Developer 以后
Versions 里面果然可以顺利点出 FileMerge 了,
至此延续了个把星期的问题总算是水落石出(时间起点为 ctags 遇到问题的时候)