exec source以及bash的區別

2021-06-02 10:14:16 字數 1383 閱讀 1219

在bash shell中,source、exec以及sh都可以用來執行shell script,但是它們的差別在**呢?

sh:父程序會fork乙個子程序,shell script在子程序中執行

source:在原程序中執行,不會fork子程序

exec:在原程序中執行,但是同時會終止原程序

注:使用export會把父程序中的變數向子程序中繼承,但是反過來卻不行,在子程序中,不管環境如果改變,均不會影響父程序

下面用乙個例子來講解

1.sh

#!/bin/bash

a=becho "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"

2.sh

code:

#!/bin/bash

echo "pid for 2.sh: $"

echo "2.sh get \$a=$a from 1.sh"

a=cexport 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終止了原來的父程序,因此,可以看到

echo "pid for 1.sh after exec/source/fork:$"

echo "1.sh: \$a is $a"

這兩個命令沒有執行

由這個例子,便大致可了解它們的區別了

exec source以及bash的區別

from 在bash shell中,source exec以及sh都可以用來執行shell script,但是它們的差別在 呢?sh 父程序會fork乙個子程序,shell script在子程序中執行 source 在原程序中執行,不會fork子程序 exec 在原程序中執行,但是同時會終止原程序 ...

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新增到環境變數中,就...