Shell中的exec和source解析

2021-09-01 15:42:35 字數 1413 閱讀 1597

shell

中的exec

和source

解析

exec

和source

都屬於bash

內部命令,在講這兩個命令之前,前談一下

fork

的概念:

fork

是linux

的系統呼叫,用來建立子程序(

child process

)。子程序是父程序

(parent process)

的乙個副本,從父程序那裡獲得一定的資源分配以及繼承父程序的環境。子程序與父程序唯一不同的地方在於

pid(

process id

)。環境變數只能單向從父程序傳給子程序,不管子程序的環境變數如何變化,都不會影響父程序的環境變數。

指令碼的執行:

1. 新產生乙個

shell

然後再執行

scripts

,也就是通常的

sh命令。

一般在scripts

#!/bin/sh

2. 在當前

shell

下執行,不再啟用其他

shell

。source

命令:不再產生新的

shell

(程序),而在當前

shell

下執行一切命令。

exec

命令:不再產生新的

shell

(程序),但執行時會把當前的

shell process

關閉,然後換到後面的命令繼續執行。

exec

:1.

系統呼叫

exec

是以新的程序去代替原來的程序,但程序的

pid保持不變。因此,可以這樣認為,

exec

系統呼叫並沒有建立新的程序,只是替換了原來程序上下文的內容。原程序的**段,資料段,堆疊段被新的程序所代替

2. exec

是乙個函式簇,由

6個函式組成,分別是以

excl

和execv

打頭的。

3. exec

與system

的區別1) exec

是直接用新的程序去代替原來的程式執行,執行完畢之後不回到原先的程式中去。

2) system

是呼叫shell

執行你的命令,

system=fork+exec+waitpid,

執行完畢之後,回到原先的程式中去。繼續執行下面的部分。

也就是說,如果你用

exec

呼叫,首先應該

fork

乙個新的程序,然後

exec.

而system

不需要fork

新程序,已經封裝好了。

shell指令碼exec和tailf的筆記

exec 不會建立子程序,在當前shell執行命令,執行完後,就退出了 tailf 可以持續追加檔案內容 cat tmp tmp.log test1 test23445 hello world nihao exec while read line do echo line done執行結果如下 7 ...

linux中system和exec函式的區別

system 是用shell來呼叫程式 fork exec waitpid,而exec是直接讓你的程式代替用來的程式執行。system 是在單獨的程序中執行命令,完了還會回到你的程式中。而exec函式是直接在你的程序中執行新的程式,新的程式會把你的程式覆蓋,除非呼叫出錯,否則你再也回不到exec後面...

exec和match中的g標識

exec 函式是regexp物件的乙個方法 match 是string物件的乙個方法。正規表示式中,如果沒有g,exec和match方法都是返回字串中第乙個匹配的部分,如果有分組的話,分組也會返回 如果有g,exec每執行一次都會將reg的lastindex屬性更新,下次載執行exec時,會從這個值...