Mac OSX 每次打开shell执行maven命令都需要`source /etc/profile` 怎么办?

  • Mac OSX 每次打开shell执行maven命令都需要`source /etc/profile` 怎么办?
    • 1.1 问题描述
    • 1.2 问题分析
    • 1.3 解决方案一
      • 1.3.1 第一步:修改环境变量配置文件读写权限
      • 1.3.2 第二步: /etc/profile 文件中添加环境变量
      • 1.3.3 第三步:修改etc/zshrc文件内容
      • 1.3.3 第四步: 让环境变量配置文件生效
    • 1.4 解决方案二
    • 2. 参考资料

Mac OSX 每次打开shell执行maven命令都需要source /etc/profile 怎么办?

1.1 问题描述

今天遇到一个奇怪的现象,在我的新电脑Mac OSX 10.15.3 上安装并配置完maven 环境变量后,每次打开shell, 想要使用maven 命令,都需要重新source /etc/profile 执行下。

为了解决这个问题,搜索了一些解决方案,最终尝试成功。

1.2 问题分析

如果我们在终端中输入如下命令:

cat /etc/shells

执行成功后,我们可以看到有mac osx 支持多个shell 类型

# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells./bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

而且值得注意的是:

在今年苹果公司发布了macOS Catalina(10.15),macOS的默认终端从bash变成了zsh.

也就是说

  • bash 是一个shell 外壳程序,zsh 也是一个shell 外壳程序。
  • profilezshrc 都是一个文本配置文件
  • 如果是centos 7 或mac osx 10.15 以下版本,默认shell 环境是bash,系统环境变量的配置文件是 /etc/profile 文件
  • 如果是mac osx 10.15 以上版本,默认shell 环境是zsh , 那么系统环境变量的配置文件默认是 /etc/zshrc文件

1.3 解决方案一

明确了原因,问题就很好解决了,解决思路可以分为三种:

  • 第一种: 修改shell 类型,将zsh 修改还原为 bash
    -这种方式不推荐,因为既然新版默认使用了这个zsh,必然是因为zsh 比bash更优秀。
  • 第二种:将etc/profile 中配置的环境变量追加到 etc/zshrc 文件最后几行。
  • 第三种:在etc/zshrc 系统环境变量配置文件中添加一条命令 source etc/profile 然后执行 source /etc/zshrc 这种方式就是不影响之前的用户习惯,我觉得是最佳解决方案,原理如下:
    • 系统启动时候先加载/etc/zshrc 中配置的环境变量命令
    • 然后发现了source /etc/profile 命令然后开始执行
    • source /etc/profile 命令执行后这个文件里面配置的环境变量生效

1.3.1 第一步:修改环境变量配置文件读写权限

  • Mac OSX 如果是一个新的电脑针对这两个文件只有只读文件权限,因此需要将这个文件授予写的权限。

为了给系统环境变量配置文件添加读写权限,我们需要输入如下命令:

给etc/profile 文件添加权限

sudo chmod 777 /etc/profile

etc/zshrc 文件添加权限

sudo chmod 777 /etc/zshrc

以上命令什么意思呢?

  • sudo 如果不指定用户,默认是切换到root 用户身份执行命令
  • chmod 是一个文件权限修改命令集
  • 777 是权限代号,表示授予文件读,写,执行的权限。
    下面一张图完美解释了777 的含义。

1.3.2 第二步: /etc/profile 文件中添加环境变量

  • 打开etc/profile 文件需要输入如下命令:
vi  /etc/profile
  • 然后按下ESC 键,再按下i 键,进入编辑插入模式。
  • 最后一行添加如下内容

/etc/profile 文件最终内容如下:

# System-wide .profile for sh(1)if [ -x /usr/libexec/path_helper ]; theneval `/usr/libexec/path_helper -s`
fiif [ "${BASH-no}" != "no" ]; then[ -r /etc/bashrc ] && . /etc/bashrc
fi# Config JDK or JRE
export JAVA_HOME=/Library/java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
export PATH=.:$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/rt.jar:.# Config Others
export MAVEN_HOME=/opt/app/maven/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

1.3.3 第三步:修改etc/zshrc文件内容

修改etc/zshrc 文件内容如下:

[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search# Default prompt
PS1="%n@%m %1~ %# "# Useful support for interacting with Terminal.app or other terminal programs
[ -r "/etc/zshrc_$TERM_PROGRAM" ] && . "/etc/zshrc_$TERM_PROGRAM"# config bash System environment variables
source /etc/profile

思路是 /etc/zshrc 命令执行的时候调用source /etc/profile 里面的环境变量

1.3.3 第四步: 让环境变量配置文件生效

系统环境变量配置文件一旦修改后如果不想重启,想立即生效,则需要输入如下命令。

source /etc/zshrc

值得注意的是,今后我们修改环境变量在etc/profile 文件中,修改完成后不再需要执行source /etc/profile命令,而是执行上面这个命令,因为这个配置文件里面调用了source /etc/profile 命令。

重新打开shell, 进行验证,大功告成。

1.4 解决方案二

最新研究发现,新版本Mac OSX 系统由于默认改用了Zsh Shell 环境,每次打开Shell 的时候都会触发读取/etc/zshrc 文件中的配置文件。

因此环境变量都配置到/etc/zshrc 中,执行source /etc/zshrc 或者重启后即可生效。

本文开头出现的故障也将不会再复现。

2. 参考资料

  • mac终端每次启动都要执行 source ~/.bash_profile
  • mac 系统下使用 chmod 命令修改文件权限

Mac OSX 每次打开shell执行maven命令都需要`source /etc/profile` 怎么办?相关推荐

  1. 解决IDEA每次打开新的maven项目都需要重新配置maven home的问题

    开发时,打开一个项目后,在file>settings>build,execution,deployment>build tools>maven下配置了maven home和se ...

  2. php shell git,shell执行git命令

    shell执行git命令 发布代码的git命令 发布博客代码到vps上,按顺序执行下面的git命令: git pull origin test git push origin master 在已经记住 ...

  3. 部署shiro官方源码时,执行maven命令出错

    转载自  部署shiro官方源码时,执行maven命令出错 部署shiro官方源码时,执行maven命令会报下面错误: [INFO] --------------------------------- ...

  4. java调用cmd执行maven命令

    java调用cmd执行maven命令 一.原理介绍 Java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命 ...

  5. 解决idea中执行maven命令失败的问题

    解决idea中执行maven命令失败的问题 参考文章: (1)解决idea中执行maven命令失败的问题 (2)https://www.cnblogs.com/qyf404/p/4839479.htm ...

  6. Jar包冲突解决方法 Unknown lifecycle phase mvn Eclipse中执行maven命令

    1.如下图,右击需要执行maven命令的工程,选择"Debug As"或"Run As",再选择"Maven build..." 进行如上操 ...

  7. IDEA如何执行maven命令进行打包编译及常用命令

    前提条件:maven配置环境变量. 在保证环境变量配置没问题的情况下执行过程出现mvn不是内部命令类似的错误,建议重启编译器或者命令窗口. 执行maven命令,方式一:  在IDEA主界面左下角找到 ...

  8. IDEA如何执行maven命令

    IDEA如何执行maven命令 1.创建maven工程,检测是否含有pom.xml文件 2.点击Edit Configurations- 3.点击"+"号,选中maven 4.在N ...

  9. php wscript.shell run,php调用com 组件wscript.shell执行dos命令

    php调用com 组件wscript.shell执行dos命令 /php调用com 组件wscript.shell执行dos命令 p(' '); if ($execfunc=='wscript' &a ...

最新文章

  1. pythonwhile列表_Python编程:while循环处理列表和字典
  2. select for update
  3. 破坏双亲委派机制的那些事
  4. java 进度条jsp,jsp进度条_jsp技巧
  5. mysql命中索引规律
  6. 三维点云学习(4)5-DBSCNA python 复现-3-kd-tree radius NN 三方库 scipy 与 sklearn速度比较
  7. c++ 写文件怎么让0x00不被识别成结束符_使用docker-copyedit工具删除镜像中不需要的环境变量和VOLUME...
  8. java基础语法day03
  9. BootStrap:基础学习
  10. 同质化代币和非同质化代币 区别对比
  11. 《Spring Boot极简教程》第9章 Spring Boot集成Scala混合Java开发
  12. 微信小程序(八 配置和请求)
  13. win10 下装win7
  14. 微信小程序合并单元格
  15. 用24张图介绍九大数据结构
  16. 北斗ATGM332D定位 gps驱动
  17. TypeScript实现归并排序
  18. 相机模型:opengl投影 vs 小孔成像
  19. 反驳李刚的针对我吐槽的回应,曝光疯狂java李刚的骗子行径
  20. 速看: 加解密、加签验签,你想要的都在这了

热门文章

  1. 如何保存手机便签里面的图片?
  2. 前端动态获取后台处理进度显示在进度条上
  3. android项目实战-人脸识别接口应用
  4. 网络同步在游戏历史中的发展变化(六)—— 优化技术总结(完结篇)
  5. 计算机协会技术部职责,计算机协会技术部策划书.doc
  6. 数据分析sql面试必会6题经典_经典的SQL语句面试题
  7. 2023特种作业操作证熔化焊接与热切割模拟一[安考星]
  8. ITIL02---蓝鲸平台介绍
  9. HTTP Response Splitting原理和解决方案
  10. 千元内哪款蓝牙耳机隔音效果好?四款降噪蓝牙耳机测评