1. 程式人生 > >linux:Shell中exec、source和shell script的區別

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:Shellexecsourceshell script區別

exec和source都屬於bash內部命令(builtins commands),在bash下輸入man exec或man source可以檢視所有的內部命令資訊。 bash shell的命令分為兩類:外部命令和內部命令。外部命令是通過系統呼叫或獨立的程式實現的,如sed

Linux學習筆記RHEL 7(十三)--Linuxsusu -sudo的區別

su 切換到root使用者,但是並沒有轉到root使用者家目錄下,即沒有改變使用者的環境。 su - 切換到root使用者,並轉到root使用者的家目錄下,即改變到了root使用者的環境。 這個涉及到不同使用者下的環境變數的配置。 sudo 通過sudo,我們能把

oracledropdeletetruncate的區別

win style 刪除數據 oracl 數據庫 不能 存在 表空間 結構 oracle中可以使用drop、delete和truncate三個命令來刪除數據庫中的表, 1. delete和truncate都是刪除表中的內容而不能刪除表的結構,而drop則是刪除表的結構和內容

sqldroptruncatedelete的區別

for tro ger view valid 保持 size 引用 gen SQL truncate 、delete與drop區別 相同點: 1.truncate和不帶where子句的delete、以及drop都會刪除表內的數據。 2.drop、truncate都是DD

JavascriptNaNnullundefinded的區別

得出 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 =

CSS3translatetransformtranslation的區別聯系

web pro 動畫 skew translate 方法 bottom Y軸 bsp translate:移動,transform的一個方法 通過 translate() 方法,元素從其當前位置移動,根據給定的 left(x 坐標) 和 top(

javaStringStringBufferStringBuilder的區別(簡單介紹)

情況 string 建議 code serializa 就是 同步 安全性 之間 簡單介紹 java中用於處理字符串常用的有三個類: 1、java.lang.String 2、java.lang.StringBuffer 3、java.lang.StrungBuilder

javalistsetmap 的區別

List的功能方法   實際上有兩種List: 一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。   List : 次序是List最重要的特點:它保證維護元素特定的順序。List為Colle

JavaString StringBufferStringBuilder的區別

String 類是不可改變的,所以你一旦建立了 String 物件,那它的值就無法改變了 StringBuffer 和 StringBuilder 類相同點: StringBuffer 和 StringBuilder 類的物件能夠被多次的修改,並且不產生新的未使用物件。 Str

圖解JavaStringStringBufferStringBuilder的區別

圖解Java中String、StringBuffer和StringBuilder的區別 參考部落格:https://blog.csdn.net/weixin_41101173/article/details/79677982 一、Java中的 String 類——String 是字串常量 1、字

java instanceofisInstanceisAssignableFrom的區別

轉自:https://blog.csdn.net/edmond999/article/details/45533899 參考:https://blog.csdn.net/raylee2007/article/details/50210181 https://blog.csdn.net/kjf

javascriptapplycallbind的區別

在JS中,這三者都是用來改變函式的this物件的指向的,他們有什麼樣的區別呢。在說區別之前還是先總結一下三者的相似之處: 都是用來改變函式的this物件的指向的。 第一個引數都是this要指向的物件。 都可以利用後續引數傳參。 區別在哪裡的,先看一個例子 var xw

Linux下gcc/g++makecmake的區別

文字程式到可執行檔案生成無論在什麼平臺大致分為以下幾個部分:    1.用編輯器編寫原始碼,如.c檔案。    2.用編譯器編譯程式碼生成目標檔案,如.o。    3.用連結器連線目的碼生成可執行檔案,如.exe。    Linux平臺下,.o檔案一般是通過編譯的但還未連結的

C++過載覆蓋隱藏的區別,以及適用場景

一、過載、覆蓋和隱藏的區別 二、適用場景 1、過載:   適用於不同的資料型別都需要使用到的功能函式。以資料相加的函式為例,可以在同一個檔案內提供以下的過載函式以支援同樣的功能:   int add(int, int);/*2個整數相加*/   int add(int, int, int);/*3個整數相

Vue computedmethods watch 的區別

<template> <div> <p>使用computed {{ message }}</p> <p>使用methods {{ message() }}<

CSSemrempx的區別以及各個的優缺點

PX:PX實際上就是畫素,用PX設定字型大小時,比較穩定和精確。但是這種方法存在一個問題,當用戶在瀏覽器中瀏覽我們製作的Web頁面時,如果改變了瀏覽器的縮放,這時會使用我們的Web頁面佈局被打破。這樣對於那些關心自己網站可用性的使用者來說,就是一個大問題了。因此,這時就提出

mongooseconnect()createConnection()connection的區別作用

1 mongoose簡介 在使用mongodb資料庫開發專案中,nodejs環境下可能會使用到mongoose模組連線並操作mongodb資料庫。mongoose模組相當於Java中的資料庫驅動,例如mysql-connector-driver-xxx.jar

JAVAStringStringBufferStringBuilder的區別

1、String不可以改變,StringBuffer和StringBuilder都是可以改變的 2、StringBuffer是同步的,資料安全,但是效率低。StringBuilder不是同步的,效率高

C++ceilfloorround的區別

  Math類中提供了三個與取整有關的方法:ceil,floor,round,這些方法的作用於它們的英文名稱的含義相對應 1、ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結果為12,Math.ceil(-11.6)的結果為-11; 2、floor的英文是地

Javascript nullNaNundefined的區別總結

js中的資料型別有undefined,boolean,number,string,object等5種,前4種為原始型別,第5種為引用型別,接下來與大家分享下它們之間的區別 1.型別分析:  js中的資料型別有undefined,boolean,number,strin