exec和source命令的区别
原文地址:http://blog.sina.com.cn/s/blog_70c6d5130100u4yn.html
exec和source都屬于bash內(nèi)部命令(builtins commands),在bash下輸入man exec或man source可以查看所有的內(nèi)部命令信息。
bash shell的命令分為兩類:外部命令和內(nèi)部命令。外部命令是通過系統(tǒng)調(diào)用或獨(dú)立的程序?qū)崿F(xiàn)的,如sed、awk等等。內(nèi)部命令是由特殊的文件格式(.def)所實現(xiàn),如cd、history、exec等等。
在說明exec和source的區(qū)別之前,先說明一下fork的概念。
fork是linux的系統(tǒng)調(diào)用,用來創(chuàng)建子進(jìn)程(child process)。子進(jìn)程是父進(jìn)程(parent process)的一個副本,從父進(jìn)程那里獲得一定的資源分配以及繼承父進(jìn)程的環(huán)境。子進(jìn)程與父進(jìn)程唯一不同的地方在于pid(process id)。
環(huán)境變量(傳給子進(jìn)程的變量,遺傳性是本地變量和環(huán)境變量的根本區(qū)別)只能單向從父進(jìn)程傳給子進(jìn)程。不管子進(jìn)程的環(huán)境變量如何變化,都不會影響父進(jìn)程的環(huán)境變量。
shell script:
有兩種方法執(zhí)行shell scripts,一種是新產(chǎn)生一個shell,然后執(zhí)行相應(yīng)的shell scripts;一種是在當(dāng)前shell下執(zhí)行,不再啟用其他shell。
新產(chǎn)生一個shell然后再執(zhí)行scripts的方法是在scripts文件開頭加入以下語句
#!/bin/sh
一般的script文件(.sh)即是這種用法。這種方法先啟用新的sub-shell(新的子進(jìn)程),然后在其下執(zhí)行命令。
另外一種方法就是上面說過的source命令,不再產(chǎn)生新的shell,而在當(dāng)前shell下執(zhí)行一切命令。
source:
source命令即點(.)命令。
在bash下輸入man source,找到source命令解釋處,可以看到解釋"Read and execute commands from filename in the current shell environment and …"。從中可以知道,source命令是在當(dāng)前進(jìn)程中執(zhí)行參數(shù)文件中的各個命令,而不是另起子進(jìn)程(或sub-shell)。
exec:
在bash下輸入man exec,找到exec命令解釋處,可以看到有"No new process is created."這樣的解釋,這就是說exec命令不產(chǎn)生新的子進(jìn)程。那么exec與source的區(qū)別是什么呢?
exec命令在執(zhí)行時會把當(dāng)前的shell process關(guān)閉,然后換到后面的命令繼續(xù)執(zhí)行。
------做運(yùn)維之前很矯情的小年輕-----
總結(jié)
以上是生活随笔為你收集整理的exec和source命令的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansible简单介绍及安装部署详解
- 下一篇: Ansible基本使用及常用模块详解