前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >环境变量详解

环境变量详解

作者头像
Fisherman渔夫
发布2020-02-18 11:28:16
1.2K0
发布2020-02-18 11:28:16
举报
文章被收录于专栏:渔夫渔夫

环境变量详解

当前文章以 Java 为例,但是编程语言在环境变量上的知识大同小异,思想是相同的。

为什么要设置环境变量

 在终端输入的命令行对应着应用程序,如果不是系统自带的命令,那么系统需要环境变量来定位应用程序所在的文件路径。

同时配置多个环境变量

一个语句中可以同时附上多个环境变量:

  • 在 Windows 系统中 PATH 变量中的所有路径采用分号 ; 分割;
  • 在 Linux 系统中采用冒号 : 分割;

PATH

 PATH 用于指定可执行的二进制文件的位置。例如:我们添加了 JDK 或者 JRE 的目录,这样我们就可以直接使用这些目录下的命令却不需要指定这些命令的绝对路径;

 关于 PATH 是这样的,每次添加一个编程语言的二进制文件都需要在原来的 PATH 上补上这个路径。设置方式如下:

代码语言:javascript
复制
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin #系统默认的路径
export PATH=$JAVA_HOME/bin:$PATH #添加 Java 的二进制文件目录
export PATH=$PATH:/usr/local/mysql/bin #添加 MySQL 的二进制文件目录
export PATH="/Library/apache-maven-3.6.3:$PATH" #添加 Maven 的二进制文件目录
export PATH="/Library/apache-maven-3.6.3/bin:$PATH"
export PATH=$PATH:$GOBIN #添加 Go 的二进制文件目录

JAVA_HOME

 JAVA_HOME 类似于 Linux 中的 /home/目录,Linux 的 home 目录用于存储用户数据目录的最顶级目录,而环境变量中的“用户”则是各种编程语言,JAVA_HOME 是 Java 编程语言 JDK 的顶级目录;

JAVA_HOME 的作用有:

  • 通过 JAVA_HOME 这个变量来方便地指定 PATH,比如我的 JAVA_HOME 是这么配置的: JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
  • 那么通过 JAVA_HOME ,PATH 可以改为如下配置: PATH=$JAVA_HOME/bin:$PATH
  • 我们也可以通过 cd 命令快速加载到 JAVA_HOME 目录: cd $JAVA_HOME直接加载到对应设置的目录下

CLASSPATH

CLASSPATH 具有双重含义:

  • Java 虚拟机或 Java 编译器中的一个参数,用于指运行程序所需要的 class 文件的位置;
  • 环境变量的一个配置,作用也是用于指运行程序所需要的 class 文件的位置;

 虽然很多关于如何配置 JDK 的文章让我们在环境变量中配置 CLASSPATH,但是事实上我们不需要配置这个参数。第一个原因是在 JAVA_HOME 中的相关 jar 文件并不需要 CLASSPATH,而很多文章中只是做了 JDK 自带架包的配置,除非我们将所有第三方架包都放置于 JAVA_HOME 中。但是,出于效率和分包管理的缘由,把第三方架包放置于 JAVA_HOME 中并不是个好主意。第二个原因是第三方架包位于哪个目录下可以通过 Java 命令的-classpath 选项来指定本次 java 文件或者 class 文件,会涉及到的 jar 和 class 文件目录。

 使用方式是将第三方 jar 和 class 文件目录以及待被处理的 java 或 class 文件的目录都放于 -classpath 选项后,多个目录在 Windows 中使用 ; 隔开,在 MacOS 中使用 : 隔开。且classpath 默认且必须含有当前目录 .javajavac 等命令会在当前目录中寻找相关 java 文件以及 class 文件。例子如下:

  • 当前文件位于 /Library/TestJavaSource目录下,类名为 xyz.jiangweijia.HelloPath.java
  • 第三包位于/Library/ThirdPartProduction目录下,包名为com.spring

那么命令应当如下:

java -classpath /Library/TestJavaSource:/Library/ThirdPartProduction xyz.jiangweijia.HelloPath.java

注意事项:

  • 我们在 Java 源文件引用第三方架包需要使用完成的类名,也就是“包名+类名”的形式,而包名会对应一个目录。比如你引用了“xyz.jiangweijia.JavaBean.java”,那么对应的目录结构则是:xyz/jiangweijia,所以你在 CLASSPATH 中无需细节到 xyz 这一层目录,仅仅需要包名对应目录的上层目录。
  • 最后指定要运行的类的时候必须加上 package,其需要完整类名是规定;
  • - classpath 选项可以使用缩写版本代替 -cp

额外要说的

Mac 上配置环境变量的方式是:

  • vim ~/.bash_profile 打开并使用 export 语句配置环境变量;
  • source ~/.bash_profile 使环境变量生效;
  • .bash_profile 注释的格式是 #

这是我本地 Mac 的环境变量配置:

代码语言:javascript
复制
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

#Java

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

# mysql
export PATH=$PATH:/usr/local/mysql/bin
#快速启动、结束MySQL服务, 可以使用alias命令
alias mysqlstart='sudo /usr/local/mysql/support-files/mysql.server start'
alias mysqlstop='sudo /usr/local/mysql/support-files/mysql.server stop'

#Maven
export PATH="/Library/apache-maven-3.6.3:$PATH"
export PATH="/Library/apache-maven-3.6.3/bin:$PATH"

#Go

export GOROOT=/usr/local/go
export GOPATH=/Users/ruby/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
  • export 命令用于修改环境变量;
  • alias 命令用于设置指令的别名,对一些较长的命令进行简化。使用 alias 时,必须使用单引号将原来的命令包含,防止特殊字符导致错误。格式是:alias 别名='原命令 -选项/参数',例如:alias ll='ls -lt';

用户环境变量和系统环境变量

 它们之间在作用域上有着显著的区别:

  • 用户环境变量:用户变量只对当前用户有效;
  • 系统环境变量:系统变量对所有用户有效;

 我们使用vim ~/.bash_profile命令进行环境变量的配置,其意义是:编辑当前 SHELL 对应的用户级环境变量配置文件,如 bash 对应的 .bash_profile。

对于 Mac 系统而言,它们对应的配置文件也不同:

  • 系统环境变量:/etc/profile/etc/bashrc
  • 用户环境变量:~/.bash_profile(Bourne Shell)和 ~/.zshrc(zsh);

 注意我们可以设置一个临时环境变量,其方式是命令行而不是配置文件中使用 export命令,其格式和配置文件中的没有区别。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境变量详解
    • 为什么要设置环境变量
      • 同时配置多个环境变量
        • PATH
          • JAVA_HOME
            • CLASSPATH
              • 额外要说的
                • 用户环境变量和系统环境变量
                相关产品与服务
                云数据库 MySQL
                腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档