zoukankan      html  css  js  c++  java
  • Linux环境变量

    在bash shell中,环境变量分为两类:

    • 全局变量
    • 局部变量

    全局环境变量

    全局环境变量对于shell会话和所有生成的子shell都是可见的。例如HOME:

    [root@localhost ~]# bash    // 进入子shell
    [root@localhost ~]# ps -f
    UID        PID  PPID  C STIME TTY          TIME CMD
    root     14862 14747  0 04:35 pts/0    00:00:00 -bash
    root     15654 14862  0 04:36 pts/0    00:00:00 bash
    root     15663 15654  0 04:36 pts/0    00:00:00 ps -f
    [root@localhost ~]# echo $HOME
    /root
    [root@localhost ~]# exit
    exit
    [root@localhost ~]#
    

    局部环境变量

    局部环境变量只能在定义它们的进程中可见。Linux也定义了标准的局部环境变量。
    使用set命令可以显示该进程的所有环境变量,包括局部变量全局变量以及用户定义变量

    [root@localhost ~]# set
    BASH=/bin/bash
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    BASH_LINENO=()
    BASH_SOURCE=()
    ...
    

    自定义环境变量

    可以在bash shell中直接设置自己的变量。

    • 自定义局部环境变量
      父shell创建的局部环境变量,在子shell中不可见;(子shell局部环境变量,在父shell中不可见)。
    [root@localhost ~]# my_variable="Hello World"
    [root@localhost ~]# echo $my_variable
    Hello World
    [root@localhost ~]# bash
    [root@localhost ~]# echo $my_variable
    
    [root@localhost ~]# exit
    exit
    [root@localhost ~]# echo $my_variable
    Hello World
    [root@localhost ~]#
    
    • 自定义全局环境变量
      可以通过export命令将局部环境变量导出到全局环境变量:
    [root@localhost ~]# my_variable="I am Global now"
    [root@localhost ~]# export my_variable
    [root@localhost ~]# echo $my_variable
    I am Global now
    [root@localhost ~]# bash
    [root@localhost ~]# echo $my_variable
    I am Global now
    [root@localhost ~]# exit
    exit
    [root@localhost ~]# echo $my_variable
    I am Global now
    [root@localhost ~]#
    

    在子shell中改变父shell继承的全局变量后,父shell中的值不会受影响,即使子shell使用了export命令。

    删除环境变量

    可以通过unset命令来删除环境变量,同样的,在子shell中删除父shell继承的全局环境变量时,对父shell无影响:

    [root@localhost ~]# echo $my_variable
    I am Global now
    [root@localhost ~]# unset my_variable
    [root@localhost ~]# echo $my_variable
    
    [root@localhost ~]#
    

    定位系统环境变量

    启动bash shell时会自动读取一些已持久化的环境变量,具体读取方式和bash的启动方式有关:

    • 登录时作为默认登录shell
    • 作为非登录shell的交互式shell
    • 作为运行脚本的非交互shell

    1.登录shell

    登录Linux系统时,bash shell作为登录shell启动,会从5个文件读取命令:

    1. /etc/profile
    2. $HOME/.bash_profile
    3. $HOME/.bash_login
    4. $HOME/.profile
    5. $HOME/.bashrc
      其中,/etc/profile是系统默认bash shell的主启动文件,系统上每个用户登录时都会启动这个文件。

    在centos系统中,这个文件会遍历/etc/profile.d目录下以.sh结尾的文件并运行。所以对于全局的每个用户都需要的环境变量,我们可以在这个目录下创建一个相应的文件。
    /etc/profile启动完成后,bash会到当前用户目录下找寻2、3、4指定的文件进行运行,按顺序找到一个就忽略剩下的。

    2.交互式shell进程

    如果shell不是在登录时启动的(比如命令提示符中敲下bash启动的),那么这个shell叫作交互式shell
    交互式shell不会访问/etc/profile,只会检查用户HOME目录下的.bashrc文件,也即是5。

    3.非交互式shell

    系统执行shell脚本时,使用的就是非交互式shell。在这种情况下,非交互式shell要想获得初始的持久化环境变量,可以使用BASH_ENV所指定的位置找寻。

    持久化环境变量建议

    1. 尽量不修改/etc/profile,最好在/etc/profile.d目录下创建.sh结尾的文件。
    2. 对于个人用户持久化变量,最好是$HOME/.bashrc
  • 相关阅读:
    WPF 分页控件Pager
    vue Map 渲染DOM
    IDEA 开发工具 Mybatis 快速开发插件 ==》MyBatisX
    令自己的本地ip可以被外网访问
    mybatis按datetime条件查询,参数为时间戳时
    springmvc传参---LocalDateTime、Date等时间类型转换
    java excel导出(表头合并,多行表头)
    JMeter学习工具简单介绍
    idea项目 run、debug变灰色的问题
    vue的ui库使用Element UI,纯html页面,不使用webpack那玩意
  • 原文地址:https://www.cnblogs.com/NameZZH/p/12843781.html
Copyright © 2011-2022 走看看