Mac OS X 下终端系统命令丢失提示 command not found 解决方法

  事件的起因是我在 ~/.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 可以参考如下步骤:

  1. 检查 ~/.bash_profile 文件是否存在,如果存在则重命名,如 mv ~/.bash_profile ~/bash_profile,然后注销输入密码,打开终端尝试 lssource 等命令。【如果个人不喜欢 .bash_profile 这个名字而使用上方所述的 3 个文件,也参照此法】

  2. 步骤 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`** 权限。【`//` 和后面的内容不要复制哈】然后注销登录,打开终端测试命令。
  1. 进入 /etc/paths.d,看看有没有最近修改的文件,同样的仔细想想 .bash_profile 最近有没有修改过,如果有,/etc/paths.d 里的某个文件先复制一份到桌面并删除; .bash_profile 则删除或注释掉(行前加 # 为注释)近期添加的内容。注销或终端执行 source ~/.bash_profile 生效。【建议注销】

  2. 我当时遇到的情况是在 .bash_profile 里添加

export PATH="$PATH:~/.composer/vendor/bin"

   导致的错误,当然也尝试过完整路径。最后我把这个路径直接放到 /etc/paths.d 里,也就是新建一个 composer 文件,内容填上

/Users/用户名/.composer/vendor/bin

   注销后解决。终端执行 echo $PATH 看了下一切正常。

你可能感兴趣的:(Mac,OS,X,故障类,其他类)