zoukankan      html  css  js  c++  java
  • 自学Linux Shell6.3-系统环境变量持久化

    点击返回 自学Linux命令行与Shell脚本之路

    6.3-系统环境变量持久化

    在你登录Linux系统启动一个bash shell时,默认情况下bash在几个文件中查找命令,这几个文件成为启动文件;
    bash检查的启动文件取决于你启动bash shell的方式,启动bash shell有3中方式:

    • 登录时当做默认登录shell;
    • 作为非登录shell的交互shell,在命令行中输入bash;
    • 作为运行脚本的非交互shell,在shell脚本中执行shell;

    1  登陆shell

    当你登录Linux系统时,登陆了shell会从5个不同的启动文件里读取命令:

    • /etc/profile:默认bash shell的主启动文件,每个用户登录都会执行这个启动文件;
    • $HOME/.bash_profile:用户专用启动文件;
    • $HOME/.bashrc:用户专用启动文件;
    • $HOME/.bash_login:用户专用启动文件;
    • $HOME/.profile:用户专用启动文件;

    1.1 /etc/profile文件  主要登陆了linux系统,bash就会执行/etc/profile/启动文件中的命令
             每个发行版的/etc/peofile文件都有不同的设置和命令

     以上程序含有for循环是用来迭代/etc/profile.d目录下所有文件

    1.2 $HOME目录下的启动文件 ,一般linux发行版只用到下面4个里面的1~2个文件:

    • $HOME/.bash_profile:用户专用启动文件;
    • $HOME/.bashrc:用户专用启动文件;
    • $HOME/.bash_login:用户专用启动文件;
    • $HOME/.profile:用户专用启动文件;

    他们都是隐藏文件,位于用户HOME目录下,所以每个用户都可以编辑这些文件并添加自己的环境变量,这些环境变量会在每次启动bash shell会话时候生效。
    如个人的测试机上面只有.profile     .bashrc

    2  交互式shell

    如果你在命令行提示符敲下bash命令,你启动的shell称作为交互式shell
    如果bash是作为交互式shell启动的,它就不会去访问/etc/profile文件,而会去用户的HOME目录检查.bashrc是否存在;
    .bashrc文件有两个作用;

    • 查看/etc目录下的公用bashrc文件;
    • 而是为用户提供了一个定制自己的命令别名和私有脚本函数的地方;

    3  非交互式shell

     系统执行shell脚本时用的就是非交互式shell,不同的地方在于它没有命令行提示符。
    当shell启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件,如果有指定的文件,shell会执行该文件里的命令,这通常包括shell脚本变量设置。

    总结 :

    1. 按变量的生存周期来划分,Linux变量可分为两类:

    •  永久的:需要修改配置文件,变量永久生效。
    •  临时的:使用export命令声明即可,变量在关闭shell时失效。

    2.永久环境变量,对所有用户有效  
       修改/etc/profile文件也可,但是如果升级所用发行版也一样会更新,定制过的变量会消失
       建议修改/etc/profile.d目录 中创建一个以.sh为结尾的文件,把定制过的全局环境变量放置其中

    3.永久环境变量,对单一用户有效
       修改用户目录下的.bash_profile文件

    4. 临时环境变量,只对当前shell(BASH)有效
        在shell的命令行下直接使用[export 变量名=变量值] 定义变量,
        该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,
        shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

  • 相关阅读:
    android.os.FileUriExposedException: exposed beyond app through ClipData.Item.getUri()踩坑记录
    【Android】 recycleview显示空白踩坑
    eclipse导入新项目,文件没有报错,但项目名一直报红
    【原因分析】The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bu
    SSM框架的搭建-xml文件报错-.xsd文件缺失
    命令行安装matplotlib中遇到问题及解决(简单记录)
    eclipse里tomcat子容器缺失解决
    导入javaFX
    ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
    eclipse左边目录(Project Explorer)不小心删除后怎么找回来
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9185777.html
Copyright © 2011-2022 走看看