Linux命令之 -- export 设置/显示系统环境变量

文章目录

  • 一、命令介绍
  • 二、export 的原理
    • (一)什么是进程
    • (二)父子进程关系
    • (三)子 shell 如何访问父 shell 的变量(export 实现原理)
    • (四)父 shell 如何访问子 shell 的变量
    • (五)export 作用范围
      • 1. 为什么当前 shell 中执行 export 所产生的效果仅在本次会话中有效呢?
      • 2. 如何设置永久的环境变
      • 3. 为什么在 /etc/profile 文件中声明定义的变量是永久有效的呢?
  • 三、常用选项
  • 四、命令示例
    • (一)列出当前所有的环境变量
    • (二)声明定义环境变量
    • (三)显示某个环境变量的值

一、命令介绍

export 的基本作用就是将父 shell 中的局部变量设置为环境变量,使得该变量可以在子 shell 中使用。

export 命令用于将 shell 变量输出为环境变量,或者将 shell 函数输出为环境变量。

一个变量创建时,在它之后创建的 shell 进程是不知道的,而命令 export 则可以向后面的 shell 进程传递变量的值;同样的,被调用执行的 shell 脚本是无权访问调用者定义的变量的,除非这些变量已经被显式地设置为可用,但是命令 export 可以传递变量的值给后继脚本。

二、export 的原理

(一)什么是进程

进程是一个运行着的程序,是代码的动态形式,进程有如下属性:

  • 独立的内核堆栈
  • 进程控制块
  • 独立的存储空间

由于每个进程有自己独立的存储空间,所以进程间的的数据是不可见的,进程间的交互需要用到进程间通信。所以在一个进程内的操作通常不会影响到另一个进程的内容,也不会被另一个进程所看到。每一个 shell 都是一个独立的进程。

(二)父子进程关系

父子进程都是独立的进程,父进程可以管理子进程,这种管理主要体现在三个方面:生、管、死。

“生”:父进程可以创建子进程。
“管”:命令 export 的操作就属于管理。
“死”:父进程死则子进程必须死,子进程死对父进程没有影响。

(三)子 shell 如何访问父 shell 的变量(export 实现原理)

在父 shell 中执行一个子 shell(执行命令 bash 就是执行一个子 shell),会启动一个子进程,即子 shell 是一个独立于父 shell 的进程,因此父子 shell 的存储空间是相互不可访问的(即子 shell 无法访问父 shell 中的变量),如果想让子 shell 访问父 shell 的变量就需要将该变量从父 shell 的独立存储空间复制到子 shell 的独立存储空间,子 shell 所看到的父进程的变量其实是自己进程空间的内容,而不是父进程的内容,只是该变量的名称和值与父进程相同而已。而命令 export 就是将父进程空间的内容复制到子进程的存储空间,也就是说命令 export 的作用就是将父进程的局部变量变成全局变量,即所谓变成环境变量。

(四)父 shell 如何访问子 shell 的变量

父进程可以将自己的环境变量写入到子进程的空间中,但是子进程无法将自己空间的数据写入到父进程中(至少 export 命令做不到)。那么想要让子 shell 中的变量在父 shell 可见,最好的办法就是不要成为子 shell,即只将该 shell 中的内容导入到父 shell 中(即将被调用的脚本内容复制到父 shell 中直接执行),而不单独执行该 shell 脚本文件。这样用到的导入命令是 source。

(五)export 作用范围

命令 export 可新增,修改或删除环境变量,供后续执行的程序使用,但是 export 产生的效果仅在本次会话中有效。

举例说明,将路径 /opt/au1200_rm/build_tools/bin 追加到环境变量 PATH 中:

export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

1. 为什么当前 shell 中执行 export 所产生的效果仅在本次会话中有效呢?

看上述的命令可知环境变量 PATH 早已经声明和定义过,这条指令是先获取变量 PATH 的旧值再拼接新的路径最后得到新的路径字符串,再将此字符串赋值给变量 PATH,所以此条指令只是将当前进程中的栈内存的环境变量 PATH 重新赋值而已,并将其定义为可输出的变量,这样每次创建子进程时就可以将此变量复制到子进程的内存空间中。

当进程结束后,内存空间被释放回收了,所以属于该进程的变量自然也被回收了。当再次创建 shell 进程时,加载到新进程内存空间的环境变量 PATH 是从配置文件读取的,相当于说环境变量 PATH 恢复原值了。

2. 如何设置永久的环境变

/etc/profile 文件中声明定义环境变量,那么每次创建进程的时候,就都可以获取到该变量的值。

[root@htlwk0001host ~]# vi /etc/profile

在里面加入:

export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

修改配置文件 /etc/profile 是对所有的用户有效,建议修改用户家目录下的配置文件 .bashrc.bash_profile,这两个配置文件仅对当前登录用户有效。

注:在全局配置文件 /etc/profile 中,如果把变量定义成上述的语句,那么第一个进程创建时变量 $PATH 的取值必然为空,因为没有父进程,所以谈不上复制父进程的全局变量。第一个进程创建时先读取 /etc/profile 文件,此时第一个进程的内存中根本不存在变量 $PATH,所以何来“旧值”替换。

3. 为什么在 /etc/profile 文件中声明定义的变量是永久有效的呢?

我们每次打开一个命令窗口,就是创建一个 shell 进程,而且这个进程是父进程,会先读取 /etc/profile 文件,所以每次创建进程的时候都可以获取到 /etc/profile 文件里面的变量。

子进程不会读取任何的配置文件,子进程的栈内存中的变量都是从父进程复制过来的,当然必须是标记为 “export” 的变量才会复制到子进程的内存空间中。

三、常用选项

选项说明
-f代表[变量名称]中为函数名称
-n删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中
-p列出所有的 shell 赋予程序的环境变量

四、命令示例

(一)列出当前所有的环境变量

[root@htlwk0001host ~]# export -p
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"

(二)声明定义环境变量

[root@linuxcool ~]# export MYENV=7

注意:仅在当前登录会话有效,退出后就失效了。

(三)显示某个环境变量的值

[root@htlwk0001host ~]# echo $HOME
/root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

packt_Packt和Java Code Geeks提供的$ 5 Java编程书籍!

packt你好,极客! 今天,我们为您带来一些激动人心的消息! Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说,Java仍然是最强大的选择之一,它是定义企业和移动设备的语言。 本…

Matplotlib常用库方法

模块pyplot常用方法 import matplotlib.pyplot as plt #pyplot模块包含很多用于生成图表的函数plt.plot(x,y,format_string) #x,y分别为x轴y轴的坐标值,第三个参数是风格,具体去查,这方法的参数很麻烦 plt.xlabel(x,fontsize14) #显示x轴的…

MacBook 如何一次性关闭所有程序的通知消息

特别反感应用程序经常弹出通知消息,挨个去关闭应用程序的通知消息又特别麻烦,可以打开『勿扰模式』,这就可以屏蔽掉所有的通知消息了。

反射获取list泛型_Android 从浅到懂使用反射机制

定义Java 反射机制是发生在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任何一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。使用…

谷歌 recaptcha_在Spring Boot应用程序中使用Google reCaptcha

谷歌 recaptcha介绍 Google的reCaptcha是一个库,用于防止漫游器将数据提交到您的公共表单或访问您的公共数据。 在本文中,我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例…

数学建模python教材推荐_数模竞赛专攻python应该准备什么?

想起以前打开Matlab就不忍心关掉的阴影(无SSD打开及其慢)。没有什么非要二选一,喜欢哪个用哪个都行,两个都试试比一比也行,比赛更不会关心你的结果图哪儿来的(小孩才。。。大人全都。。。)。Matlab有Matlab的好处,非常成熟的软件包…

python中if __name__ == ‘__main__‘:的简单理解

举例说明,这里有两个模块 # ni模块 print("这是1.") if __name__ __main__:print("这是2.")输出结果: 这是1.这是2. #wo模块 import ni print("这是3.")输出结果: 这是1这是3 总结: 运行自己的模块时会运行if _…

Linux 命令之 wget -- 下载文件工具

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例(一)下载并以不同的文件名保存(二)下载单个文件(三)限速下载(四)断点续传(五)使用 wget 后台下载…

创建react应用程序_使用SpringWebFlux的React式Web应用程序

创建react应用程序1.React式编程简介 React式编程是为具有以下特征的应用程序创造的术语: 非阻塞应用 事件驱动和异步 需要少量线程来垂直扩展(即在JVM中) 就像面向对象的编程,函数式编程或过程式编程一样,React式…

获取当地天气_Mac 天气预报动态壁纸工具Living Weather HD 4.4.4

这款独特的非凡应用程序将天气呈现在您的桌面上,它能够预报天气状况,并在桌面上使用相应的美丽动态壁纸场景。 天气HD也可以用作屏保。 主要功能: ● 在桌面上了解世界各地当前的天气状况和未来状况 ● 与当前天气状况、今天或明天预报相应的…

Linux 命令之 curl 的选项(英文版)

Usage: curl [options...] <url> Options: (H) means HTTP/HTTPS only, (F) means FTP only--anyauth Pick "any" authentication method (H) 可以使用“任何”身份验证方法-a, --append Append to target file when uploading (F/SFTP) 上传文件…

获取文件夹下的文件名并存入txt中

import os path_imgsC:/Users/13451/Desktop/pic #图片存放的地址 for files in os.listdir(path_imgs): #listdir函数获取文件夹下图片的名字,返回包含所有文件名字的列表with open(C:/Users/13451/Desktop/train_data.txt,a) as f: f.write(files.rstrip(.png)) #只保存名…

javaparser_JavaParser生成,分析和修改Java代码

javaparser作为开发人员&#xff0c;我们经常鄙视手动进行重复工作的人员。 我们认为&#xff0c; 他们应该实现这一目标 。 尽管如此&#xff0c;我们还是进行与编码有关的所有活动。 当然&#xff0c;我们使用的高级IDE可以为我们执行一些重构&#xff0c;但这基本上就结束…

计算机系统组成_网络教育统考计算机应用基础题库(计算机系统的组成2)

点击蓝字关注我哦11在微型计算机的各种设备中&#xff0c;既用于输入又可用于输出的设备是____。A、磁盘驱动器B、键盘C、鼠标D、绘图仪点击空白处查看答案参考答案:A12计算机的硬件系统由五大部分组成&#xff0c;下列各项中不属于这五大部分的是______。A、运算器B、软件C、I…

深度学习基础实战使用MNIST数据集对图片分类

本文代码完全借鉴pytorch中文手册 我们找到数据集&#xff0c;对数据做预处理&#xff0c;定义我们的模型&#xff0c;调整超参数&#xff0c;测试训练&#xff0c;再通过训练结果对超参数进行调整或者对模型进行调整。 import torch import torch.nn as nn import torch.nn.f…

Linux 命令之 curl -- 文件传输工具/下载工具/网络接口调试

文章目录 一、命令介绍二、常用选项三、wget 与 curl 对比四、命令示例(一)以 post 方式提交数据/以 post 方式传递请求参数(二)查看网页的源码内容(三)保存访问的网页源码内容(四)将服务器的回应保存成文件/将输出保存成文件(五)显示 http response 头信息,打印出服…

python cookie使用_Python使用cookielib模块操作cookie的实例教程

cookielib是一个自动处理cookies的模块&#xff0c;如果我们在使用爬虫等技术的时候需要保存cookie&#xff0c;那么cookielib会让你事半功倍&#xff01;他最常见的搭档模块就是python下的urllib和request。核心类1.Cookie该类实现了Netscape and RFC 2965 cookies定义的cooki…

pytorch中unsqueeze()函数理解

unsqueeze()函数起升维的作用,参数表示在哪个地方加一个维度。 在第一个维度(中括号)的每个元素加中括号 0表示在张量最外层加一个中括号变成第一维。 直接看例子: import torch inputtorch.arange(0,6) print(input) print(input.shape) 结果&#xff1a; tensor([0, 1, 2, 3…

Linux 命令之 ifconfig -- 配置和显示网卡的网络参数

文章目录一、命令介绍二、常用选项三、参考示例&#xff08;一&#xff09;显示网络设备信息&#xff08;激活状态的&#xff09;&#xff08;二&#xff09;启动关闭指定网卡&#xff08;三&#xff09;显示所有配置的网络接口&#xff0c;不论其是否激活&#xff08;四&#…

版本交付_连续交付友好的Maven版本

版本交付持续交付管道需要可预测的软件和依赖版本。 Maven软件项目中常见的快照版本与“持续交付”背后的动机背道而驰。 为了将快照版本更新为发行版本&#xff0c;开发人员通常手动或通过诸如maven-release-plugin来编辑pom.xml文件。 但是&#xff0c;Maven还提供了将版本号…