为什么Mac source ~/.bash_profile只生效一次(macOS Catalina)

  • Post author:
  • Post category:其他




Mac环境变量的设置

开发中对环境变量的修改和增加比较普遍,此处做为记录也供大家参考。

一般mac电脑配置环境变量的方法(本文主要说明macOS Catalina的配置问题)

sudo vi ~/.bash_profile

按回车输入密码后用vi打开用户目录下的.bash_profile。

添加需要的变量(这里配置android tools的环境变量):

export Android_sdk=/Users/eagle/Library/Android/sdk;
export PATH=${PATH}:${Android_sdk}/platform-tools

这里说明一下,环境变量的规则是以英文冒号”:”分隔。按 esc 后 :wq退出编辑,使之立刻生效需要 执行

source ~/.bash_profile 

开始输入我们期望的命令 adb shell,正常。

但是,另外一个终端始终无效,或关闭该终端再打开也无效

zsh:command not found:adb



每次都要执行source ~/.bash_profile才有效

如果您的系统也是

macOS Catalina

,可以继续往下看。

重开终端,再次查看.bash_profile,内容是正确的,再次执行source ~/.bash_profile 之后 adb shell又正常了,这样也太麻烦了,这个问题需要解决:



解决方法(任选一种即可)



一. 环境变量添加到.zshrc

  1. 打开或创建.zshrc
sudo vi ~/.zshrc
  1. 输入和.bash_profile相同的内容
export Android_sdk=/Users/eagle/Library/Android/sdk;
export PATH=${PATH}:${Android_sdk}/platform-tools
  1. 保存退出,执行下面命令立即生效
source ~/.bash_profile 

接着执行我们的命令,好的,大功告成。



二 .zshrc中 添加source ~/.bash_profile

  1. 打开或创建.zshrc
sudo vi ~/.zshrc
  1. 添加内容

    source ~/.bash_profile

    到.zshrc 中

  2. 保存退出,执行下面命令立即生效

source ~/.zshrc 



三 切换mac的shell

设置了

.bash_profile

的情况下,把shell从zsh 切换为bash,这样不用每次都source .bash_profile。

chsh -s /bin/bash

要切回zsh的话执行:

chsh -s /bin/zsh



是什么原因

来自Apple官网的说明:

点这里查看更多

从 macOS Catalina 版开始,您的 Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell。您还可以在较低版本的 macOS 中将 zsh 设置为默认 Shell。

默认情况下,您的 Mac 使用 zsh 或 bash 作为登录 Shell 和交互式 Shell 的命令行解释器:

从 macOS Catalina 版开始,zsh (Z shell) 是所有新建用户帐户的默认 Shell。

bash 是 macOS Mojave 及更低版本中的默认 Shell。

zsh 与 Bourne Shell (sh) 高度兼容,并且与 bash 基本兼容,但存在一些差别。要进一步了解 zsh 及其全面的命令行完成系统,请在“终端”中输入 man zsh。

也就是说zsh的命令行读取的path不是从.bash_profile里面读取的,而是从.zshrc配置文件里面读取。所以上面几种办法都是基于这个原因。

关于mac环境变量加载顺序,可参考

这里



版权声明:本文为lanlangaogao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。