* 所謂環境變量其實就是那些會傳給子行程的變量。
* 環境變量只能從父行程到子行程單向繼承。換句話說:在子行程中的環境如何變更,均不會影響父行程的環境。
* 正常來說,當我們執行一個 shell script 時,其實是先產生一個 sub-shell 的子行程,然後 sub-shell 再去產生命令行的子行程。
* 所謂 source 就是讓 script 在當前 shell 內執行、而不是產生一個 sub-shell 來執行。
* exec 也是讓 script 在同一個行程上執行,但是原有行程則被結束了。
- # cat 1.sh
-
#!/bin/bash
-
A=B
-
echo "PID for 1.sh before exec/source/fork:$$"
-
export A
-
echo "1.sh: \$A is $A"
-
case $1 in
-
exec)
-
echo "using exec..."
-
exec ./2.sh ;;
-
source)
-
echo "using source..."
-
. ./2.sh ;;
-
*)
-
echo "using fork by default..."
-
./2.sh ;;
-
esac
-
echo "PID for 1.sh after exec/source/fork:$$"
-
echo "1.sh: \$A is $A"
- # cat 2.sh
-
#!/bin/bash
-
echo "PID for 2.sh: $$"
-
echo "2.sh get \$A=$A from 1.sh"
-
A=C
-
export A
-
echo "2.sh: \$A is $A"
- # ./1.sh fork
-
PID for 1.sh before exec/source/fork:40125
-
1.sh: $A is B
-
using fork by default...
-
PID for 2.sh: 40126
-
2.sh get $A=B from 1.sh
-
2.sh: $A is C
-
PID for 1.sh after exec/source/fork:40125
-
1.sh: $A is B
- # ./1.sh source
-
PID for 1.sh before exec/source/fork:40133
-
1.sh: $A is B
-
using source...
-
PID for 2.sh: 40133
-
2.sh get $A=B from 1.sh
-
2.sh: $A is C
-
PID for 1.sh after exec/source/fork:40133
-
1.sh: $A is C
- # ./1.sh exec
-
PID for 1.sh before exec/source/fork:40137
-
1.sh: $A is B
-
using exec...
-
PID for 2.sh: 40137
-
2.sh get $A=B from 1.sh
-
2.sh: $A is C
阅读(134) | 评论(0) | 转发(0) |