linux:Shell中exec、source和shell script的區別
exec和source都屬於bash內部命令(builtins commands),在bash下輸入man exec或man source可以檢視所有的內部命令資訊。
bash shell的命令分為兩類:外部命令和內部命令。外部命令是通過系統呼叫或獨立的程式實現的,如sed、awk等等。內部命令是由特殊的檔案格式(.def)所實現,如cd、history、exec等等。
在說明exe和source的區別之前,先說明一下fork的概念。
fork是linux的系統呼叫,用來建立子程序(child process)。子程序是父程序(parent process)的一個副本,從父程序那裡獲得一定的資源分配以及繼承父程序的環境。子程序與父程序唯一不同的地方在於pid(process id)。
環境變數(傳給子程序的變數,遺傳性是本地變數和環境變數的根本區別)只能單向從父程序傳給子程序。不管子程序的環境變數如何變化,都不會影響父程序的環境變數。
shell script:
有兩種方法執行shell scripts,一種是新產生一個shell,然後執行相應的shell scripts;一種是在當前shell下執行,不再啟用其他shell。
新產生一個shell然後再執行scripts的方法是在scripts檔案開頭加入以下語句
#!/bin/sh
一般的script檔案(.sh)即是這種用法。這種方法先啟用新的sub-shell(新的子程序),然後在其下執行命令。
另外一種方法就是上面說過的source命令,不再產生新的shell,而在當前shell下執行一切命令。
source:
source命令即點(.)命令。
在bash下輸入man source,找到source命令解釋處,可以看到解釋"Read and execute commands from filename in the current shell environment and ..."。從中可以知道,source命令是在當前程序中執行引數檔案中的各個命令,而不是另起子程序(或sub-shell)。
exec:
在bash下輸入man exec,找到exec命令解釋處,可以看到有"No new process is created."這樣的解釋,這就是說exec命令不產生新的子程序。那麼exec與source的區別是什麼呢?
exec命令在執行時會把當前的shell process關閉,然後換到後面的命令繼續執行。
相關推薦
linux:Shell中exec、source和shell script的區別
exec和source都屬於bash內部命令(builtins commands),在bash下輸入man exec或man source可以檢視所有的內部命令資訊。 bash shell的命令分為兩類:外部命令和內部命令。外部命令是通過系統呼叫或獨立的程式實現的,如sed
Linux學習筆記RHEL 7(十三)--Linux中su、su -和sudo的區別
su 切換到root使用者,但是並沒有轉到root使用者家目錄下,即沒有改變使用者的環境。 su - 切換到root使用者,並轉到root使用者的家目錄下,即改變到了root使用者的環境。 這個涉及到不同使用者下的環境變數的配置。 sudo 通過sudo,我們能把
oracle中drop、delete和truncate的區別
win style 刪除數據 oracl 數據庫 不能 存在 表空間 結構 oracle中可以使用drop、delete和truncate三個命令來刪除數據庫中的表, 1. delete和truncate都是刪除表中的內容而不能刪除表的結構,而drop則是刪除表的結構和內容
sql中drop、truncate和delete的區別
for tro ger view valid 保持 size 引用 gen SQL truncate 、delete與drop區別 相同點: 1.truncate和不帶where子句的delete、以及drop都會刪除表內的數據。 2.drop、truncate都是DD
Javascript中NaN、null和undefinded的區別
得出 ber 引用 blog log 數據類型 pre 定義 false var a1; var a2 = true; var a3 = 1; var a4 = "Hello"; var a5 = new Object(); var a6 = null; var a7 =
CSS3中translate、transform和translation的區別和聯系
web pro 動畫 skew translate 方法 bottom Y軸 bsp translate:移動,transform的一個方法 通過 translate() 方法,元素從其當前位置移動,根據給定的 left(x 坐標) 和 top(
java中String、StringBuffer和StringBuilder的區別(簡單介紹)
情況 string 建議 code serializa 就是 同步 安全性 之間 簡單介紹 java中用於處理字符串常用的有三個類: 1、java.lang.String 2、java.lang.StringBuffer 3、java.lang.StrungBuilder
java中list、set和map 的區別
List的功能方法 實際上有兩種List: 一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。 List : 次序是List最重要的特點:它保證維護元素特定的順序。List為Colle
Java中String 、StringBuffer和StringBuilder的區別
String 類是不可改變的,所以你一旦建立了 String 物件,那它的值就無法改變了 StringBuffer 和 StringBuilder 類相同點: StringBuffer 和 StringBuilder 類的物件能夠被多次的修改,並且不產生新的未使用物件。 Str
圖解Java中String、StringBuffer和StringBuilder的區別
圖解Java中String、StringBuffer和StringBuilder的區別 參考部落格:https://blog.csdn.net/weixin_41101173/article/details/79677982 一、Java中的 String 類——String 是字串常量 1、字
java 中instanceof、isInstance和isAssignableFrom的區別?
轉自:https://blog.csdn.net/edmond999/article/details/45533899 參考:https://blog.csdn.net/raylee2007/article/details/50210181 https://blog.csdn.net/kjf
javascript中apply、call和bind的區別
在JS中,這三者都是用來改變函式的this物件的指向的,他們有什麼樣的區別呢。在說區別之前還是先總結一下三者的相似之處: 都是用來改變函式的this物件的指向的。 第一個引數都是this要指向的物件。 都可以利用後續引數傳參。 區別在哪裡的,先看一個例子 var xw
Linux下gcc/g++、make和cmake的區別
文字程式到可執行檔案生成無論在什麼平臺大致分為以下幾個部分: 1.用編輯器編寫原始碼,如.c檔案。 2.用編譯器編譯程式碼生成目標檔案,如.o。 3.用連結器連線目的碼生成可執行檔案,如.exe。 Linux平臺下,.o檔案一般是通過編譯的但還未連結的
C++中過載、覆蓋和隱藏的區別,以及適用場景
一、過載、覆蓋和隱藏的區別 二、適用場景 1、過載: 適用於不同的資料型別都需要使用到的功能函式。以資料相加的函式為例,可以在同一個檔案內提供以下的過載函式以支援同樣的功能: int add(int, int);/*2個整數相加*/ int add(int, int, int);/*3個整數相
Vue 中 computed、methods 和 watch 的區別
<template> <div> <p>使用computed {{ message }}</p> <p>使用methods {{ message() }}<
CSS中em、rem和px的區別以及各個的優缺點
PX:PX實際上就是畫素,用PX設定字型大小時,比較穩定和精確。但是這種方法存在一個問題,當用戶在瀏覽器中瀏覽我們製作的Web頁面時,如果改變了瀏覽器的縮放,這時會使用我們的Web頁面佈局被打破。這樣對於那些關心自己網站可用性的使用者來說,就是一個大問題了。因此,這時就提出
mongoose中connect()、createConnection()和connection的區別和作用
1 mongoose簡介 在使用mongodb資料庫開發專案中,nodejs環境下可能會使用到mongoose模組連線並操作mongodb資料庫。mongoose模組相當於Java中的資料庫驅動,例如mysql-connector-driver-xxx.jar
JAVA中String、StringBuffer和StringBuilder的區別
1、String不可以改變,StringBuffer和StringBuilder都是可以改變的 2、StringBuffer是同步的,資料安全,但是效率低。StringBuilder不是同步的,效率高
C++中ceil、floor和round的區別
Math類中提供了三個與取整有關的方法:ceil,floor,round,這些方法的作用於它們的英文名稱的含義相對應 1、ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結果為12,Math.ceil(-11.6)的結果為-11; 2、floor的英文是地
Javascript 中 null、NaN和undefined的區別總結
js中的資料型別有undefined,boolean,number,string,object等5種,前4種為原始型別,第5種為引用型別,接下來與大家分享下它們之間的區別 1.型別分析: js中的資料型別有undefined,boolean,number,strin