from:
在bash shell中,source、exec以及sh都可以用來執行shell script,但是它們的差別在**呢?
sh:父程序會fork乙個子程序,shell script在子程序中執行
source:在原程序中執行,不會fork子程序
exec:在原程序中執行,但是同時會終止原程序
注:使用export會把父程序中的變數向子程序中繼承,但是反過來卻不行,在子程序中,不管環境如果改變,均不會影響父程序
下面用乙個例子來講解
[plain]view plain
copy
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"
[plain]view plain
copy
2.sh
code:
#!/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
可以看到,1.sh是在父程序中執行,2.sh是在子程序中執行的,父程序的pid是5344,而子程序的是5345,當子程序執行完畢後,控制權返回到父程序。同時,在子程序改變環境變數a的值不會影響到父程序。
./1.sh source
由結果可知,1.sh和2.sh都是在同一程序中執行的,pid為5367
./1.sh exec
可知,兩個指令碼都是在同一程序中執行,但是請注意,使用exec終止了原來的父程序,因此,可以看到
[plain]view plain
copy
echo "pid for 1.sh after exec/source/fork:$"
echo "1.sh: \$a is $a"
這兩個命令沒有執行
由這個例子,便大致可了解它們的區別了
exec source以及bash的區別
在bash shell中,source exec以及sh都可以用來執行shell script,但是它們的差別在 呢?sh 父程序會fork乙個子程序,shell script在子程序中執行 source 在原程序中執行,不會fork子程序 exec 在原程序中執行,但是同時會終止原程序 注 使用e...
ASIHttpRequest登入與Basic驗證
一 asihttprequest元件的新增在我的其他blog裡有介紹,這裡不予贅述。二 基本的request ibaction graburl id sender 二 帶basic驗證的request 新增 1 設定request模式為basic,request 2 新增username和passw...
在Windows上VSCode執行Bash終端
可能windows開發的乙個缺點就是與shell結合的不好,git bash提供了一種方式可以在windows下執行linux命令,如何將其結合在vscode中使用呢?兩種方式 1.將git bash目錄比如c program files x86 git bin bash.exe新增到環境變數中,就...