Bash Shell - set, export, source如何应用。变量在父进程,子进程之间的传递

  1. 如何让子进程 (Child process) 能够看见并应用其父进程 (Parent process) 下传的环境变量(Environment variables) ?
  • Ans: 在 Parent process, export var1="value1" , child process 就能够继承,看到 parent process 的环境变量
    -注意 在 Parent process, set var1="value" 或者 var1="value" , child process 都不能 看到 parent process 的环境变量
  1. 如何让子进程 (Child process)在结束后其环境变量可以上递至父进程 (Parent process) 的环境变量(Environment variables) ?
  • Ans: 在 Parent process, source child.sh 或者 . ./child.sh.
  • 在 Child process, export var1="value" 或者 var1="value" , Parent process 就 看到 Child process 的环境变量
    注意 在 Child process, set var1="value" , Parent process 不能 看到 Child process 的环境变量
    注意 在 Child process, 即使已经 export var1="value" 或者 var1="value" ,若 Parent Process 没有 source child process , child process 依然不能上递至父进程

来做个实验

0x01 实验

  • 1.sh line #6 ./2.sh

1.sh (parent process)

export name1="pid1"
set salary1=1000
stock1=110000


./2.sh

echo "in 1.sh, echo name2=$name2"
echo "in 1.sh, echo salary2=$salary2"
echo "in 1.sh, echo stock2=$stock2"

2.sh (child process)


echo "in 2.sh, echo name1=$name1"    
echo "in 2.sh, echo salary1=$salary1"
echo "in 2.sh, echo stock1=$stock1"  

export name2="pid2"

set salary2=2000

stock2=220000

执行的结果.

  • 只有1.sh export的变量在 2.sh 能够让 Child process 看到
  • 2.sh结束后 , 没有一个在2.sh定义的变量(就连export的)也不能上递到 Parent Process.
cloud_user@wengkoon5c:~$ ./1.sh
in 2.sh, echo name1=pid1  
in 2.sh, echo salary1=    
in 2.sh, echo stock1=     
in 1.sh, echo name2=      
in 1.sh, echo salary2=    
in 1.sh, echo stock2=         
cloud_user@wengkoon5c:~$  

0x02a 实验

  • 1.sh line #6 source ./2.sh

1.sh (parent process)

export name1="pid1"
set salary1=1000
stock1=110000


source ./2.sh

echo "in 1.sh, echo name2=$name2"    
echo "in 1.sh, echo salary2=$salary2"
echo "in 1.sh, echo stock2=$stock2"  

2.sh (child process)


echo "in 2.sh, echo name1=$name1"    
echo "in 2.sh, echo salary1=$salary1"
echo "in 2.sh, echo stock1=$stock1"  

export name2="pid2"

set salary2=2000

stock2=220000

执行的结果.

  • 只有1.sh export的变量在 2.sh 能够让 Child process 看到
  • 2.sh结束后 , 只有2.shexport var1=value1var1=value1变量能上递到 Parent Process.
in 2.sh, echo name1=pid1   
in 2.sh, echo salary1=     
in 2.sh, echo stock1=110000
in 1.sh, echo name2=pid2   
in 1.sh, echo salary2=     
in 1.sh, echo stock2=220000

0x02b 实验

  • 1.sh line #6 . ./2.sh

1.sh (parent process)

export name1="pid1"
set salary1=1000
stock1=110000


. ./2.sh

echo "in 1.sh, echo name2=$name2"    
echo "in 1.sh, echo salary2=$salary2"
echo "in 1.sh, echo stock2=$stock2"

2.sh (child process)


echo "in 2.sh, echo name1=$name1"    
echo "in 2.sh, echo salary1=$salary1"
echo "in 2.sh, echo stock1=$stock1"  

export name2="pid2"

set salary2=2000

stock2=220000

执行的结果 与0x02a 一致

  • 只有1.sh export的变量在 2.sh 能够让 Child process 看到
  • 2.sh结束后 , 只有2.shexport var1=value1var1=value1变量能上递到 Parent Process.
in 2.sh, echo name1=pid1
in 2.sh, echo salary1=
in 2.sh, echo stock1=110000
in 1.sh, echo name2=pid2
in 1.sh, echo salary2=
in 1.sh, echo stock2=220000

参考了
Linux下set,env,export,source,exec深入解析

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值