- fork ( /directory/script.sh)
fork是最普通的, 就是直接在腳本里面用/directory/script.sh來調用script.sh這個腳本.
運行的時候開一個sub-shell執行調用的腳本,sub-shell執行的時候, parent-shell還在。
sub-shell執行完畢後返回parent-shell. sub-shell從parent-shell繼承環境變量.但是sub-shell中的環境變量不會帶回parent-shell
-
exec (exec /directory/script.sh)
exec與fork不同,不需要新開一個sub-shell來執行被調用的腳本. 被調用的腳本與父腳本在同一個shell內執行。但是使用exec調用一個新腳本以後, 父腳本中exec行之後的內容就不會再執行了。這是exec和source的區別
-
source (source /directory/script.sh)
與fork的區別是不新開一個sub-shell來執行被調用的腳本,而是在同一個shell中執行. 所以被調用的腳本中聲明的變量和環境變量, 都可以在主腳本中得到和使用.
可以通過下面這兩個腳本來體會三種調用方式的不同:
export1.sh
#! /bin/sh
echo "export1 PID:$$"
foo="The first meta-sybtactic variable"
export bar="The second meta-syntactic variable"
case $1 in
exec)
echo "using exec..."
exec ./export2.sh;;
source)
echo "using source..."
. ./export2.sh;;
*)
echo "using fork by default..."
./export2.sh;;
esac
export2.sh
#! /bin/sh
echo "export2 PID:$$"
echo $foo
echo $bar