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

目录

  • Mac环境变量的设置
    • 每次都要执行source ~/.bash_profile才有效
    • 解决方法(任选一种即可)
      • 一. 环境变量添加到.zshrc
      • 二 .zshrc中 添加source ~/.bash_profile
      • 三 切换mac的shell
    • 是什么原因

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环境变量加载顺序,可参考这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三相四线怎样查漏电_老电工支招!漏电保护器的接线方法

家居装修中,电路问题是比较重要的,尤其是现在家居中使用的电器越来越多,所以漏电保护器是一定要的,能有很好的保护作用,那漏电保护器接线图是怎样的呢,漏电保护器接线方法以及注意事项有哪些,快…

view.post不执行的坑点

view.post没执行,runOnUiThread,Handler 目录坑点处理原因经历复盘6.0版本10.0版本总结坑点 子线程执行view.post(Runnable) 部分 手机没有效果。 usernameEditText.post(new Runnable() {Overridepublic void run() {usernameEditText.setText("…

扫地机器人划伤地板_扫地机器人哪个牌子好?会选的才能买到好产品

做为一种既时尚潮流又智能化的家用电器,扫地机器人一经面世就遭受大伙儿的关心。大家最先会感觉扫地机器人十分便捷,次之也会对它造成疑惑:就那么一台小小环形设备,确实能处理困惑人们这些年的打扫难题吗?事实上在扫地机器人的应用全过程中,客户对它的印像确实有很多种多样,有…

ThreadLocal初识

目录背景ThreadLocal的作用ThreadLocal特性ThreadLocal实现1. T get()2. set(T value)3. remove()验证一个对象只存一个数据多少个对象就能存多少个数据背景 这两天稍微有点空,在追溯之前的android 7.0之前的手机用View.post 出现不执行的问题时,结识了…

Gensee SDK UserInfo类函数详细说明

目录基本信息rolestatusclientType其他UserInfo是一个公共的类,用于RtSDK和PlayerSDK。由于role和status是复合1量,列出相关的判断方式,true为注释说明,false反之。 如 isHost() true 老师/false 不是老师。 基本信息 getUserId…

python中shutil模块_Python中shutil模块的学习笔记教程

介绍shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来记忆模块的名称。该模块拥有许多文件(夹)操作的功能,包括复制、移动、重命名、删除等等一、chutil.copy(source, destination)shutil.copy()…

HTML转义字符大全<转>

为什么要用转义字符串&#xff1f; HTML中<&#xff0c;>&#xff0c;&等有特殊含义&#xff08;<&#xff0c;>&#xff0c;用于链接签&#xff0c;&用于转义&#xff09;&#xff0c;不能直接使用。这些符号是不显示在我们最终看到的网页里的&#xff0c…

python测网速_tespeed-测试网速的Python工具

1.安装(环境CentOS7)#pip install lxml#wget wget http://sourceforge.net/projects/socksipy/files/socksipy/SocksiPy%201.00/SocksiPy.zip#git clone https://github.com/Janhouse/tespeed.git#mv SocksiPy.zip tespeed/SocksiPy/#cd tespeed/SocksiPy/#unzip SocksiPy.zip#…

Gensee SDK RoleType详解

目录RoleType使用场景&#xff1a;方法与使用说明源码RoleType 接着之前的 UserInfo,对RoleType做进一步说明. 此类是SDK的公共类&#xff0c;可以在任一SDK使用方进行调用&#xff0c;之前有提到role是一个“复合”的值1&#xff0c;所以不能简单的用“” 来判断&#xff0c;…

vc 通过句柄修改窗口大小_漫画:对象是如何被找到的?句柄 OR 直接指针?

小贴士&#xff1a;想要使用并定位 Java 对象&#xff0c;就要用到 Java 虚拟机栈&#xff08;Java Virtual Machine Stack&#xff09;&#xff0c;它描述的是 Java 方法执行的线程内存模型&#xff1a;每个方法被执行的时候&#xff0c;Java 虚拟机都会同步创建一个栈帧&…

数据结构快速掌握和温习-面试神器

由于原文有部分文字没有显示&#xff0c;本文有所修改。主要包括文字和缩进。 目录 Q1&#xff1a;数据结构和算法的知识点整理&#xff1a; Q2&#xff1a;链表&#xff0c;队列和栈的区别 Q3&#xff1a;简述快速排序过程 Q4&#xff1a;快速排序算法的原理 Q5&#xff1a;简…

python阴阳师_如何用Python找到阴阳师妖怪屋的最佳探索队伍!强不强?

程序由来最初想要写这个小程序是因为&#xff0c;9月份那段时间我在玩妖怪屋。因为刚开始抽卡&#xff0c;要啥啥没有&#xff0c;所以探索队伍也只是放了几个自己记得有关联的式神。在网上有找到完整版的羁绊&#xff0c;但是怎么根据羁绊找到最佳的式神组合就成问题了。当时我…

Android iOS防录屏截屏

目录Android防录屏和截屏关于WindowManager.LayoutParams.FLAG_SECURE关于Display.FLAG_SECUREiOS防录屏和截屏监听截屏录屏监听需求与安全总是对立的&#xff0c;有新的需求&#xff0c;就有新的接口开放&#xff0c;但随之而来的就是利用新接口或者新接口的使用者&#xff08…

work节点使用外部包_AFLSmart工具简单分析及使用介绍

AFLSmart 是一个在 AFL 基础上&#xff0c;结合了 Peach 的结构化输入组件的灰盒 smart fuzz 工具。AFLSmart 链接&#xff1a;https://github.com/aflsmart/aflsmart参考资料&#xff1a;《Smart Greybox Fuzzing》什么是 AFLSmart灰盒 smart fuzz灰盒测试是基于程序运行时刻的…

Android adb 启动APP

目录启动命令一 常规命令 包名/activity二 常规命令 包名命令关闭App获取包名和activity的路径代码获取1 命令获取( 需要app运行在前台&#xff0c;停留在启动界面)2命令获取(先执行命令&#xff0c;再点击app启动)启动命令 一 常规命令 包名/activity adb shell am start…

python语言使用什么语句实现上下文管理协议_Python 上下文管理器

上下文管理器在使用Python编程中&#xff0c;可以会经常碰到这种情况&#xff1a;有一个特殊的语句块&#xff0c;在执行这个语句块之前需要先执行一些准备动作&#xff1b;当语句块执行完成后&#xff0c;需要继续执行一些收尾动作。例如&#xff1a;当需要操作文件或数据库的…

Android日志[基础篇]Android Log日志输出

Android日志[基础篇]二 Android Studio修改LogCat日志的颜色 android.util.Log输出日志的常用方法如下&#xff1a; Log.v(String tag, String msg)Log.d(String tag, String msg)Log.i(String tag, String msg)Log.w(String tag, String msg)Log.e(String tag, String msg) …

python函数应用_python 函数应用

#函数的参数就是个变量#定义函数的时候&#xff0c;使用关键字参数&#xff0c;可以指定默认值def hello(namereboot,age1):return hello %s,your age is %s %(name,age)print hello(reboot,3)print hello(3,reboot)#print hello(age3,namereboot)print hello(reboot)def f(n):…

Android日志[基础篇]二 Android Studio修改LogCat日志的颜色

上一篇提到Android日志的5个级别的日志输出&#xff0c;在logcat里面设置自己喜欢或习惯的颜色&#xff0c;本文不只讲Android Sudio修改logcat的日志颜色。 代码和效果 代码 private void logColor(){Log.v(TAG,"logColor verbose");Log.d(TAG,"logColor de…

readfile函数使用方法_1分钟学会LOOKUP函数,有网友说使用这个方法,初学者秒变大神...

Hi&#xff0c;大家好&#xff0c;本专栏将会从零开始和大家用图文的方式&#xff0c;30天让你从不会到熟练使用函数&#xff0c;0基础开始学习Excel函数&#xff0c;让你喜欢上它&#xff01;有兴趣的小伙伴可以持续关注我&#xff0c;或者在专栏进行查看学习&#xff0c;愿与…