linux中export的作用,父Shell,子Shell

本文详细解析了在Linux环境中,父shell与子shell的概念及区别,深入探讨了使用bash、./、source命令执行脚本的机制。通过实验对比,阐述了变量作用域、环境变量导出及脚本执行对当前工作环境的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:https://blog.youkuaiyun.com/damontive/article/details/50352722

首先说明两个概念:
父shell与子shell,从shellA中启动一个shell,称之为shellB。 shellA为父shell,shellB为子shell。
最容易理解的情况就是在一个shell中执行一个gnome-terminal命令(不同桌面环境命令不一样),弹出一个新的shell
最常见的情况是在当前shell下执行脚本,这个脚本实际上是在子shell中执行的
bash;"./";".";source运行脚本的区别

source和.等价这个首先我们要知道

echo $PPID    #父进程PID
echo $$    #当前进程PID

source命令即点(.)命令,在bash下输入man source,找到source命令解释处,可以看到解释"Read and execute commands from filename in the current shell environment and ..."。

从中可以知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程。

source t.sh

bash和"./"命令都是打开一个子shell来读取并执行FileName中命令。(严格来说./并不算执行程序的命令,只是代表当前路径),子shell执行完毕之后就会回到父shell,不会对父shell产生影响。“ ./ "只能用于拥有执行权限的文件

bash t.sh

该filename文件可以无“执行权限”,当然,配置文件就是影响当前的工作环境,这种情况下用source。

现在有三个脚本
exp1.sh

var="hello,world"

exp2.sh

var="hello,world"
export var

test.sh

echo $var

实验1:

source exp1.sh
echo $var
bash test.sh

结果:

实验2 

source exp2.sh
echo $var
bash test.sh

 

可以看到在当前shell下执行echo $var是没有任何问题的,但是执行bash test.sh时,实验1是没有任何输出(找不到var这个变量)实验2 echo出了var的值。因为实验2中exp2.sh加入了export,所以var变成了环境变量,所以var对子shell是可见的,而实验1中由于没有export var,所以var是个局部变量,并不能被子shell看到

再啰嗦几句, linux中在 etc/profile 或者 ~/.bash_profile或者其他类似的文件中设置环境变量时(比如PATH),如果没有export,那么只能在直接启动的shell中起作用,如果在当前shell下运行脚本或者直接启动一个子shell,因为实际上是局部变量。子shell看不见的,所以就gg了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值