source 就是讓 script 在當(dāng)前 shell 內(nèi)執(zhí)行、而不是產(chǎn)生一個(gè) sub-shell 來(lái)執(zhí)行。由
exec 也是讓 script 在同一個(gè)行程上執(zhí)行,但是原有行程則被結(jié)束了。
 source ./my.script 
 或: . ./my.script
 也就是簡(jiǎn)而言之:原有行程會(huì)否終止,就是 exec 與 source/fork 的最大差異了。
代碼1.sh
#!/bin/bashA=Becho "PID FOR 1.sh before exec/source/fork:$$"export Aecho "1.sh:/$A is $A"case $1 in exec) echo "using exec,,,,," exec ./2.sh ;; #執(zhí)行完成后結(jié)束 source) echo "using source...." . ./2.sh ;; #執(zhí)行完成后繼續(xù)執(zhí)行 *) echo "using fork by default...." ./2.sh ;; #另起一個(gè)進(jìn)程來(lái)執(zhí)行 2.sh 執(zhí)行后繼續(xù)執(zhí)行1.shesacecho "PID FOR 1.sh after exec/source/fork :$$"echo "1.sh:/$A is $A"
代碼 2.sh

1 #!/bin/bash2 echo "PID for 2.sh:$$"3 echo "2.sh get /$A=$A from 1.sh"4 A=C5 export A6 echo "2.sh: /$A is $A"
修改文件權(quán)限:
1 chmod 744 1.sh2 chmod 744 2.sh
測(cè)試代碼:

$ ./1.sh fork $ ./1.sh source$ ./1.sh exec
結(jié)果:
# ./1.sh execPID FOR 1.sh before exec/source/fork:243941.sh:$A is Busing exec,,,,,PID for 2.sh:243942.sh get $A=B from 1.sh2.sh: $A is C# ./1.sh sourcePID FOR 1.sh before exec/source/fork:244411.sh:$A is Busing source....PID for 2.sh:244412.sh get $A=B from 1.sh2.sh: $A is CPID FOR 1.sh after exec/source/fork :244411.sh:$A is C# ./1.sh forkPID FOR 1.sh before exec/source/fork:244721.sh:$A is Busing fork by default....PID for 2.sh:244732.sh get $A=B from 1.sh2.sh: $A is CPID FOR 1.sh after exec/source/fork :244721.sh:$A is B
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注