Linux下export命令和source命令与环境变量设置「建议收藏」

Linux下export命令和source命令与环境变量设置「建议收藏」Linux下export命令和source命令与环境变量设置环境变量广泛用于程序运行环境的设置。从Linuxshell的角度来看,环境变量无非就是shell脚本的变量而已。从这个角度理解环境变量,就能理解设置环境变量的那些命令究竟在做什么。说明:笔者的系统为debian,shell为bash,以下例子均在笔者的Linux环境下测试,不保证其他环境能够通过。export命令和source命令…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Linux下export命令和source命令与环境变量设置

环境变量广泛用于程序运行环境的设置。从Linux shell的角度来看,环境变量无非就是shell脚本的变量而已。从这个角度理解环境变量,就能理解设置环境变量的那些命令究竟在做什么。

说明:笔者的系统为debian,shell为bash,以下例子均在笔者的Linux环境下测试,不保证其他环境能够通过。

export命令和source命令

教程中都说export命令用于设置环境变量,如果是临时设置(当前shell进程生效)则在shell里敲export XXX=YYY,如果是设置永久生效则在诸如~/.bashrc之类的文件里添加export XXX=YYY,然后再用source命令+修改的文件名(例如source ~/.bashrc)使得环境变量的设置在当前shell立即生效(重启shell也可以).

如果把环境变量当作普通的shell语言变量,这种操作就不难理解了。export命令的作用是使得环境变量对于该shell进程的子进程生效source命令的作用是把source后面跟的文件内容在当前shell进程中执行。因此,我们不难理解,当我们临时设置环境变量时,我们直接在当前shell窗口设置了对于本shell进程及其子进程都生效的变量XXX,当我们在当前shell执行相关的操作时,我们运行的shell作为当前shell窗口的子进程,共享XXX变量的定义,环境变量XXX生效。但是当我们关闭当前shell窗口时,定义了XXX变量的shell进程结束了,环境变量XXX也随之失效。

当我们在文件中永久设置环境变量时,不妨假设我们把环境变量XXX设置在了~/.bashrc文件中,那么source命令会在当前shell进程中执行~/.bashrc中的内容(而不是像我们平时执行shell脚本一样用./或shell+文件名执行,这样是把shell脚本作为当前shell窗口的一个子进程执行,随着脚本子进程的结束,变量的生命周期也就结束了),使得我们写在~/.bashrc里的export在当前shell进程下被执行,对当前shell及其子进程生效。

实验

下面用一个例子来说明进程中shell变量的定义与使用。首先我们来说明export的作用。

我们在shell窗口中定义变量DA_KAO_LA

DA_KAO_LA=LOVE

用echo命令查看变量的值,注意使用变量要用$

echo $DA_KAO_LA         # output: LOVE

由于我们没有export这个变量,所以DA_KAO_LA只在当前shell生效,对子进程不生效。作为试验,我们新建一个shell脚本

vim da_kao_la.sh

在脚本da_kao_la.sh中写入

echo $DA_KAO_LA

,试图输入在shell窗口中定义的变量DA_KAO_LA,并设置脚本为可执行

chmod +x da_kao_la.sh

执行脚本,没有任何输出

./da_kao_la.sh          # no output

而当我们export了DA_KAO_LA变量,

export DA_KAO_LA

不仅能在当前shell窗口中得到DA_LAO_LA的值,

echo $DA_KAO_LA         # output: LOVE

也能在子进程中得到DA_LAO_LA的值

./da_kao_la.sh          # output: LOVE

还可以通过export XXX=YYY直接定义变量XXX的值为YYY

export DA_KAO_LA=LIKE

验证以下

echo $DA_KAO_LA         # output: LIKE
./da_kao_la.sh          # output: LIKE

然后我们来说明source的作用。首先为了避免干扰,我们用unset命令取消对于变量DA_KAO_LA的定义

unset DA_KAO_LA

此时再次echo无结果

echo $DA_KAO_LA         # no output

在脚本da_kao_la.sh中加入定义DA_KAO_LA变量的内容

vim da_kao_la.sh
# file content:
# DA_KAO_LA=LOVE
# echo $DA_LAO_LA

执行脚本

./da_kao_la.sh          # output: LOVE

说明变量的设置在./da_kao_la.sh这个进程中是生效的
但是在shell窗口执行,则没有输出,因为当前shell窗口是父进程,而变量DA_KAO_LA是在子进程中定义的

echo $DA_LAO_LA         # no output

为了让da_kao_la.sh中定义的DA_KAO_LA在父进程中生效,可以运行source命令

source da_kao_la.sh     # output: LOVE

这条命令相当于在当前shell窗口下直接输入

DA_KAO_LA=LOVE
echo $DA_LAO_LA         # output: LOVE

再在shell窗口下执行echo,可以得到输出

echo $DA_LAO_LA         # output: LOVE

此时如果有一个文件xiao_kao_la.sh,内容为echo $DA_LAO_LA,执行

./xiao_kao_la.sh        # no output

仍然是得到不到输出的,但source执行

source xiao_kao_la.sh   # output: LOVE

可以得到输出。原因是没有export变量使得在父进程(当前shell窗口)中的变量对子进程(./xiao_kao_la.sh)生效,而source xiao_kao_la.sh相当于是在当前shell窗口执行echo命令。修改da_kao_la.sh的内容将第一行改为

export DA_KAO_LA=LOVE

source一下

source da_kao_la.sh     # output: LOVE

此时执行

./xiao_kao_la.sh        # output: LOVE

可以得到输出。

Debian系统下与环境变量有关的各个文件

对所有用户生效的文件:

  • /etc/profile
  • /etc/bash.bashrc
  • /etc/profile.d/bash_profile.sh
    对当前用户生效的文件:
  • ~/.profile
  • ~/.bashrc

profile系列的文件与bashrc系列的文件的区别与Linux的login模式与interactive模式的区别有关。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196588.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深度学习之卷积神经网络CNN及tensorflow代码实现示例

    深度学习之卷积神经网络CNN及tensorflow代码实现示例一、CNN的引入在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的。当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的28×2828×28的手写数字图片,输入层的神经元就有784个,如下图所示:若在中间只使用一层隐藏层,参数ww就有784×15=11760784×15=11760多个;若输入的

    2022年6月21日
    29
  • cheerio 笔记

    cheerio 笔记简介 cheerio 是一个 node 的库 可以理解为一个 Node js 版本的 jquery 用来从网页中以 cssselector 取数据 使用方式和 jquery 基本相同 npminstallch require cheerio var cheerio load lt h2class title gt Hellowo

    2025年11月20日
    3
  • 静默安装失败是什么意思_静默安装命令

    静默安装失败是什么意思_静默安装命令静默安装Oracle Database 18c

    2022年4月21日
    216
  • linux 重启nginx 服务[通俗易懂]

    linux 重启nginx 服务[通俗易懂]第一步:进入nginx安装目录默认安装目录为/usr/local/nginx/sbin/nginx这里我的安装路径为/app/nwom/Inspur/apps/tools-nginx第二步:查看进程ps-ef|grepnginx第三步:杀掉原进程从主进程开始(上图圈红的为主进程)kill-92386kill-9238723882389239023912392239323942395239623972398第四步:启动进程启动方式1:./ngin

    2022年8月13日
    7
  • 【Python】 【绘图】plt.figure()的使用

    【Python】 【绘图】plt.figure()的使用1.figure语法及操作(1)figure语法说明figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True)num:图像编号或名称,数字为编号,字符串为名称 figsize:指定figure的宽和高,单位为英寸; dpi参数指定绘图对象的分辨率,即每英寸多少个像素,…

    2022年6月29日
    50
  • element ui 图片加载失败_vue 3.x 中使用element-ui时, el-image图片加载失败!!「建议收藏」

    element ui 图片加载失败_vue 3.x 中使用element-ui时, el-image图片加载失败!!「建议收藏」问题描述vuecreateele命令创建了一个vue3.x的项目cdelecnpminpmrunserve把项目跑起来cnpmielement-ui-S安装element-ui修改HelloWorld.vue(增加使用el-image及其他组件),跑起来后,el-image对应的图片显示加载失败,但如果换成绝对地址就能正确加载,不知道什么原因!问题出现的环境背景及…

    2022年5月22日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号