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時,會從這個值...