Mac OSX 每次打开shell执行maven命令都需要`source /etc/profile` 怎么办?
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
外壳程序。profile
和zshrc
都是一个文本配置文件- 如果是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` 怎么办?相关推荐
- 解决IDEA每次打开新的maven项目都需要重新配置maven home的问题
开发时,打开一个项目后,在file>settings>build,execution,deployment>build tools>maven下配置了maven home和se ...
- php shell git,shell执行git命令
shell执行git命令 发布代码的git命令 发布博客代码到vps上,按顺序执行下面的git命令: git pull origin test git push origin master 在已经记住 ...
- 部署shiro官方源码时,执行maven命令出错
转载自 部署shiro官方源码时,执行maven命令出错 部署shiro官方源码时,执行maven命令会报下面错误: [INFO] --------------------------------- ...
- java调用cmd执行maven命令
java调用cmd执行maven命令 一.原理介绍 Java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命 ...
- 解决idea中执行maven命令失败的问题
解决idea中执行maven命令失败的问题 参考文章: (1)解决idea中执行maven命令失败的问题 (2)https://www.cnblogs.com/qyf404/p/4839479.htm ...
- Jar包冲突解决方法 Unknown lifecycle phase mvn Eclipse中执行maven命令
1.如下图,右击需要执行maven命令的工程,选择"Debug As"或"Run As",再选择"Maven build..." 进行如上操 ...
- IDEA如何执行maven命令进行打包编译及常用命令
前提条件:maven配置环境变量. 在保证环境变量配置没问题的情况下执行过程出现mvn不是内部命令类似的错误,建议重启编译器或者命令窗口. 执行maven命令,方式一: 在IDEA主界面左下角找到 ...
- IDEA如何执行maven命令
IDEA如何执行maven命令 1.创建maven工程,检测是否含有pom.xml文件 2.点击Edit Configurations- 3.点击"+"号,选中maven 4.在N ...
- php wscript.shell run,php调用com 组件wscript.shell执行dos命令
php调用com 组件wscript.shell执行dos命令 /php调用com 组件wscript.shell执行dos命令 p(' '); if ($execfunc=='wscript' &a ...
最新文章
- pythonwhile列表_Python编程:while循环处理列表和字典
- select for update
- 破坏双亲委派机制的那些事
- java 进度条jsp,jsp进度条_jsp技巧
- mysql命中索引规律
- 三维点云学习(4)5-DBSCNA python 复现-3-kd-tree radius NN 三方库 scipy 与 sklearn速度比较
- c++ 写文件怎么让0x00不被识别成结束符_使用docker-copyedit工具删除镜像中不需要的环境变量和VOLUME...
- java基础语法day03
- BootStrap:基础学习
- 同质化代币和非同质化代币 区别对比
- 《Spring Boot极简教程》第9章 Spring Boot集成Scala混合Java开发
- 微信小程序(八 配置和请求)
- win10 下装win7
- 微信小程序合并单元格
- 用24张图介绍九大数据结构
- 北斗ATGM332D定位 gps驱动
- TypeScript实现归并排序
- 相机模型:opengl投影 vs 小孔成像
- 反驳李刚的针对我吐槽的回应,曝光疯狂java李刚的骗子行径
- 速看: 加解密、加签验签,你想要的都在这了