记录--mac下终端内的环境变量问题

  一直使用的是前几年买的MacBook Air,当时感觉很轻薄,外观也非常的好看,也是一直用到现在,大概有三四年了,系统还是很流畅(实话,不是打广告......)。平时也是经常要使用mac的终端,说实话,自从用了mac的终端,基本上跟linux的命令一样得心应手,再使用windows下的cmd就感觉很别扭,上去就打ls,windows是dir,当然有些命令还是相同的,比如mkdir。

  好了,其他的就不多说了,这次出现的问题主要是这一段时间使用mac的终端的时候,发现配置的环境变量总是莫名其妙失效,每次都要source一下,并且source了一下还不够,每次重新打开终端都要重新source,刚开始也是没有在意,因为原来一直没有这个问题,而且平时基本上电脑也是不关机的,不用的时候直接合上,所以也没有怎么在意。今天再次出现这个问题的时候就打算必须要解决掉,到底为什么?

  先是上网百度了一下这个Terminal init时候加载配置文件的顺序:

mac 一般使用bash作为默认shell

Mac系统的环境变量,加载顺序为:
/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc

  我的环境变量是配置到 ~/.bash_profile文件中的,刚开始搜索时都是一大堆的让修改 .zshrc 文件,刚开始的时候确实安装了这个,后来还是感觉没有bash原始界面看着习惯就卸载掉了,我还以为没有卸载干净的问题,找了半天的.zshrc文件也没有找到,那就先否定了是这个问题。那么既然确定了终端初始化时配置文件的加载顺序,就可以一步步定位问题,对于这几个配置文件,/etc下面的两个文件是系统级别的,系统启动的时候就会加载,后面几个是当前用户级别。后面3个按照从前往后的顺序读取,如果~/.bash_profile文件存在,则后面的几个文件就会被忽略不读了,如果~/.bash_profile文件不存在,才会以此类推读取后面的文件。~/.bashrc没有上述规则,它是bash shell打开的时候载入的。这里可以推荐一个大神的博客,对这些文件讲解的很详细,这里我就不再详细介绍:MAC 设置环境变量path的几种方法

  根据上面的规则,看起来~/.bashrc是比较特殊的,是打开终端就会载入的,而我是把环境变量配置到.bash_profile文件中,那么这里我们可以先测试一下,首先打开一下.bashrc文件看一下里面有什么。输入命令:vi ~/.bashrc,发现里面是空的,然后可以在里面输入 echo ".bashrc运行了", 保存退出。退出终端后重新打开,发现并没有输出 ".bashrc运行了"这句话,这是不是跟上面的规则违背了呢? 于是我再次搜索,在另一个大佬的文章中找到了答案:

Mac OS X 环境变量设置【转】 – Helix的日志 – 网易博客

“OS X 和 Linux 都有 .bash_profile 和 .bashrc 这两个配置文件。

但是,在OS X里会遇到bashrc不生效的情况。

当shell是login shell,.bash_profile才会加载,而bashrc正好相反。

真正的区别是在linux下,当用户登录到一个图形界面,然后打开一个终端terminal,那些shell是non-login shell。

然而,在OS X登录的时候,并没有运行着一个shell,所以,在运行Terminal.app的时候,其实那是一个login shell。

你还是可以在bashrc下写一些配置,只要在bash_profile里source .bashrc就是了。

对于login shell,我也确实在终端的配置中找到了相关答案: 点击终端的"偏好设置"选项

在通用一栏中可以看到shell的打开方式 "默认登录Shell"。刚开始时我发现我选择的是"命令(完整的路径)",在这种方式下并不会先加载".bash_profile"文件,这是我后来改过后发现可以保证.bash_profile文件在打开时就加载。

  选择Shell的打开方式为"默认登录Shell"后,测试一下,看看终端是否是打开载入。首先在.bash_profile文件中写入 echo ".bash_profile文件运行了" ,保存退出后关闭终端重新打开。

  发现.bash_profile现在确实是在终端打开时就先读取了,而刚才的.bashrc文件是没有在打开时加载的,那么如果我的环境变量想配置到.bashrc文件中,我们可以在.bash_profile文件中写入"source ~/.bashrc",因为终端打开时优先加载.bash_profile,加载到"source ~/.bashrc"这一句时会去加载 .bashrc文件,这样就可以保证配置在 .bashrc文件中的环境变量可以被加载到,下面可以测试一下:

1  .bash_profile文件中写入 echo ".bash_profile文件运行了" 和 "source ~/.bashrc"

2 .bashrc文件写入 echo ".bashrc文件运行了"

关闭终端后重新打开:

可以清楚的看到,打开终端后先输出了".bash_profile文件运行了",然后输出".bashrc文件运行了",这表明终端载入文件的顺序是先载入.bash_profile文件,而在.bash_profile文件中又source了.bashrc文件,因此使得加载.bash_profile文件的时也加载了.bashrc文件,这样即使你的环境变量是配置在.bashrc中的也可以正确的运行。输入env可以查看你当前配置的环境变量等信息。

总结:这次解决问题也是查了很多博客和帖子,千篇一律的也是一大堆,当时我搜索的是“mac下为什么每次打开终端都必须要重新source .bash_profile”,搜到的全是说你安装了zsh,启动终端时会读取.zshrc配置文件,这个也许说的都是对的,但不符合我的情况也不是我想要的,那么这种情况就应该仔细的分析一下,换一种思路去解答这个问题,首先每一次打开终端都必须要手动source一下.bash_profile文件,说明终端启动时没有读取这个文件,那么我当时就搜一下,mac下终端启动时环境变量配置文件的加载顺序,再加上这个问题原来是没有出现的,说明原来是管用的,说明将环境变量配置到.bash_profile文件中是没有问题的,到此问题就缩小到,为什么终端启动时没有读取.bash_profile文件。这些是我当时发现问题和解决问题的思路,可能有些啰嗦,但是我只是想把我整个解决问题的过程和想法分享给其他人,也是总结一下,方便自己,方便他人。

  

原文地址:https://www.cnblogs.com/yanht/p/11577809.html

时间: 2024-08-26 16:11:08

记录--mac下终端内的环境变量问题的相关文章

Mac下设置Android adb环境变量

1. 找到adb本地路径 adb放在platform-tools 我的路径是(/Users/android-sdk-macosx/platform-tools) 2. 打开终端,进入到sdk文件夹中 touch .bash_profile open -e .bash_profile 新建一个.bash_profile文件,然后打开后编辑.如果是第一次打开,应该会是空白的文档,如果已经编辑过了,在原来内容后面加;添加的内容. 3. 在.bash_profile文件中添加adb的路径 export

mac下查看和设置环境变量

1.查看环境变量 命令    env 2.修改环境变量 命令    cd ~ && ls -a && sudo vim .bashrc 编辑输入要添加的环境变量 3.shell 配置及生效 source ~/.bashrc 原文地址:https://www.cnblogs.com/cangqinglang/p/8258660.html

Mac下搭建php开发环境[翻译]

原英文链接:http://www.codeweblog.com/mac-os-x-to-configure-apache-php-mysql/ Mac OS X 内置了Apache 和 PHP,这样使用起来非常方便.本文以Mac OS X 10.6.3为例.主要内容包括: 启动Apache 运行PHP 安装MySQL 使用phpMyAdmin 配置PHP的MCrypt扩展库 设置虚拟主机 启动Apache 有两种方法: 打开"系统设置偏好(System Preferences)" -&

mac 下搭建 Android 开发环境

因工作需要,要在mac 下搭建 Android 开发环境.谷歌.度娘了好久,没有找个一个完整又系统的方法,很是苦恼.最终,皇天不负有心人,找到了下面这篇文档,特此记录.也为有这方面需求的朋友提供个方便. 首先我们需要知道开发安卓的环境由以下几个组件组成:Java虚拟机JDK.Eclipse.Eclipse插件ADT(Android Developer Tool)和Android开发包SDK.下面就和大家一起学习如何来快速的,适合新手的搭建方式吧! 方法/步骤 因为系统自带jdk,所以就不用在下载

Mac下配置Cocos2d-x3.1环境

一.前期准备 1.ADT:百度下就OK 2.NDK:百度下就OK 3.ANT: http://124.254.47.39/download/55152992/78533365/4/zip/57/132/1388364864569_644/apache-ant-1.9.3-bin.zip 我用的是这个 二.配置环境变量 打开终端,执行:vim ~/.bash_profile # Add environment variableCOCOS_CONSOLE_ROOT for cocos2d-x #ex

mac 下 react Native android环境搭建

1.参考  上一篇的博客文章 "mac 下 react Native ios环境搭建",前面几步都是必须的,只是,原生客户端不一致 2.Android Studio的安装 A:安装JAVA的SDK 注意:Android Studio需要Java Development Kit [JDK] 1.8或更高版本.你可以在命令行中输入 javac -version来查看你当前安装的JDK版本.如果版本不合要求,可以到 官网上下载 B:除非特别注明,请不要改动安装过程中的选项.比如Android

[Shell&Mac&Environment variables]自己常用的Mac(或者说Linux)Shell命令小结,含Mac使用zsh shell的环境变量的有关配置方法

今天在使用tomcat的配置的时候,我用的mac,要是用到一些命令去配置tomcat. 问题来了: 我每次要去启动tomcat服务特别麻烦,因为我要先进入tomcat所在的文件目录,或者不进入使用~/,但是因为我把tomcat放到了一个比较“深“的文件夹里,所以命令显得又丑又长. 问题解决方案: 1.使用环境变量(修改.bashrc的方法) a.先查看自己的Mac目前正在用的是什么shell echo $SHELL 返回结果类似如下图 这里我是zsh,,也许你是bash,不过没关系,配置环境变量

搭建Mac下的cocos2dx3.2环境

搭建Mac下的cocos2dx3.2环境 1.下载着四个包 2.打开Mac的终端进入cocos2dx3.2目录输入./setup.py 3.分别输入对应DNK,SDK,ANT的路径 易错点: ->Error: "/Users/Nyist-MacBook/Desktop/Amorming/apache-ant-1.9.4" is not a valid path of ANT_ROOT. Ignoring it. 路径选择到ant包里的bin文件夹 然后输入 cocos new -

window和ubuntu下安装JDK配置环境变量

JDK的环境变量的安装,记录一下,以便方便忘记看,主要是window和ubuntu系统下的安装和环境变量的配置 JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 下载对应系统的JDK 一.Window下安装JDK配置环境: 安装很简单,选择存放目录就行,基本上一直next. 配置环境变量: 在系统环境下配置如下: 新建  JAVA_HOME C:\Program Fi