事件的起因是我在 ~/.bash_profile 里添加了
~/.composer/vendor/bin
这个东西导致,或许是 OS X 10.11 的 bug?
先说说 Mac OS 里对环境变量文件的加载顺序
/etc/profile -> /etc/paths -> ~/.bash_profile
主要就是这 3 个,如果在找不到 ~/.bash_profile
还会继续按照下方的顺序查找配置文件【可以忽略下方 3 个,不常用】
~/.bash_login -> ~/.profile -> ~/.bashrc
解决终端命令丢失 command not found 可以参考如下步骤:
- 检查
~/.bash_profile
文件是否存在,如果存在则重命名,如mv ~/.bash_profile ~/bash_profile
,然后注销输入密码,打开终端尝试ls
、source
等命令。【如果个人不喜欢.bash_profile
这个名字而使用上方所述的后 3 个文件,也参照此法】 - 步骤 1 基本就解决了系统命令问题,如果还存在,仔细检查
/etc/paths
文件,里面默认包含如下内容:
【注意顺序非常重要,如果有通过brew
安装 PHP 等组件,/usr/local/bin
和/usr/local/sbin
在/usr/bin
和/usr/sbin
之后的话,则后面含有相同的命令不会覆盖之前的命令,以前者为准。】
【例如/usr/bin
里包含了php phpize php-config
等文件,则终端下默认执行的就是/usr/bin
里的版本。而/usr/local/bin
里的php phpize php-config
等文件则会忽略。所以为了使用上brew
安装的版本,推荐把/usr/local/bin
和/usr/local/sbin
放在/usr/bin
和/usr/sbin
之前】
/bin
/sbin
/usr/local/bin
# 这个默认是没有的,建议加上
/usr/local/sbin
/usr/bin
/usr/sbin
如果没有或者不完全,请复制上方内容并粘贴到 `paths` 文件,需要 **`root`** 权限。【`//` 和后面的内容不要复制哈】然后注销登录,打开终端测试命令。
- 进入
/etc/paths.d
,看看有没有最近修改的文件,同样的仔细想想.bash_profile
最近有没有修改过,如果有,/etc/paths.d
里的某个文件先复制一份到桌面并删除;.bash_profile
则删除或注释掉(行前加#
为注释)近期添加的内容。注销或终端执行source ~/.bash_profile
生效。【建议注销】 - 我当时遇到的情况是在
.bash_profile
里添加
export PATH="$PATH:~/.composer/vendor/bin"
导致的错误,正确的写法是这样:export PATH="$HOME/.composer/vendor/bin:$PATH"
当然也可以在 /etc/paths.d
里新建一个 composer
文件,内容填上
/Users/用户名/.composer/vendor/bin
注销后解决。终端执行 echo $PATH
看了下一切正常