- 如何让子进程 (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 的环境变量
- 如何让子进程 (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.sh 内
export var1=value1
,var1=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.sh 内
export var1=value1
,var1=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