Linux:导出环境变量命令export

相关阅读

Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


Linux中的内建命令export命令用于创建一个环境变量,或将一个普通变量导出为环境变量,并且在这个过程中,可以给该环境变量赋值。

下面是该命令的语法。

复制代码
用法:
export [-pfn] [name[=word]]
选项:
-p 指定该选项会打印出当前进程的所有环境变量(被导出的变量)及其值
-f 指定导出一个函数名
-n 取消一个环境变量(被导出的变量)或导出函数的导出属性

环境变量(被导出的变量)指的是一类特殊的变量,当一个进程开辟了其他进程后,它们会被子进程继承,系统默认的环境变量一般使用大写变量名,后面我们统称环境变量。例如$SHELL这个环境变量就存储了用户默认登录的Shell路径,可以使用echo命令查看一个环境变量的值。

复制代码
[***@EDA ~]$ echo $SHELL
/bin/bash

使用export命令而不添加name参数会导致和使用-p选项一样的结果,即打印出当前进程的所有环境变量及其值。

复制代码
[***@EDA ~]$ export
declare -x SHELL="/bin/bash"
declare -x WINDOWPATH="1"
declare -x KDEDIRS="/usr"
declare -x LANG="en_US.UTF-8"
declare -x PrimeTime_HOME="/opt/Synopsys/PrimeTime2018/pts/O-2018.06-SP1"
declare -x Synopsys_Dir="/opt/Synopsys"
*****

[***@EDA ~]$ export -p
declare -x SHELL="/bin/bash"
declare -x WINDOWPATH="1"
declare -x KDEDIRS="/usr"
declare -x LANG="en_US.UTF-8"
declare -x PrimeTime_HOME="/opt/Synopsys/PrimeTime2018/pts/O-2018.06-SP1"
declare -x Synopsys_Dir="/opt/Synopsys"
*****

一个进程中定义的普通的变量是无法被其子进程访问到的。

复制代码
[***@EDA ~]$ aaa=1        #在当前进程创建一个变量
[***@EDA ~]$ bash         #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $aaa    #此时尝试访问$aaa失败
(nothing output)

一个进程中的环境变量可以被子进程继承。

复制代码
[***@EDA ~]$ bbb=1       #在当前进程创建一个变量
[***@EDA ~]$ export bbb  #导出该变量(使其成为环境变量)
[***@EDA ~]$ bash        #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $bbb   #此时尝试访问$bbb成功
1

为什么我们不使用系统默认环境变量举例呢?这是因为即使我们改变了系统默认环境变量的值, 在新建bash子进程时,虽然其继承了父进程的环境变量,但其会自动读取配置文件初始化环境变量,从而覆盖之前改变的值。

复制代码
[***@EDA ~]$ SHELL=1      #改变系统默认环境变量
[***@EDA ~]$ echo $SHELL  #在当前进程中,环境变量的值被改变
1
[***@EDA ~]$ export       #在当前进程中,环境变量的值被改变
*****
declare -x SHELL="1"
*****
[***@EDA ~]$ bash         #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $SHELL  #环境变量的值虽然被继承,但紧接着初始化了
/bin/bash

使用-n选项可以取消一个环境变量的导出属性,即将一个环境变量变成普通变量。

复制代码
[***@EDA ~]$ ccc=1       #在当前进程创建一个变量
[***@EDA ~]$ export ccc  #导出该变量(使其成为环境变量)
[***@EDA ~]$ bash        #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $ccc   #此时尝试访问$ccc成功
1
[***@EDA ~]$ exit           #退出bash子进程
[***@EDA ~]$ export -n ccc  #取消变量导出(使其成为普通变量)
[***@EDA ~]$ echo $ccc      #当前进程仍可以访问
[***@EDA ~]$ bash           #在当前进程运行另一个bash子进程
[***@EDA ~]$ echo $ccc      #此时尝试访问$ccc失败
(nothing output)

使用-f选项可以导出一个函数,使该函数能在子进程中调用。

复制代码
[***@EDA ~]$ my_function() {           #在当前进程创建一个函数
>     echo "This is my function."  
> }
[***@EDA ~]$ export -f my_function     #导出该函数
[***@EDA ~]$ bash
[***@EDA ~]$ my_function 
This is my function.

由于.bashrc配置文件的内容会在bash启动后被读取并执行,所以如果要添加一个默认的环境变量,需要在配置文件中使用export命令,如下图所示。

相关推荐
2301_14725836939 分钟前
7月2日作业
java·linux·服务器
格调UI成品2 小时前
预警系统安全体系构建:数据加密、权限分级与误报过滤方案
大数据·运维·网络·数据库·安全·预警
盘古开天16663 小时前
如何用废弃电脑变成服务器搭建web网站(公网访问零成本)
服务器·电脑·免费公网ip
xuanzdhc5 小时前
Linux 基础IO
linux·运维·服务器
愚润求学5 小时前
【Linux】网络基础
linux·运维·网络
bantinghy6 小时前
Linux进程单例模式运行
linux·服务器·单例模式
小和尚同志7 小时前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
帽儿山的枪手7 小时前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全
shadon1789 天前
回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务
linux
AWS官方合作商9 天前
AWS ACM 重磅上线:公有 SSL/TLS 证书现可导出,突破 AWS 边界! (突出新功能的重要性和突破性)
服务器·https·ssl·aws