1. 程式人生 > >source 與export聯絡與使用

source 與export聯絡與使用

shell與export命令

使用者登入到Linux系統後,系統將啟動一個使用者shell。在這個shell中,可以使用shell命令或宣告變數,也可以建立並執行shell指令碼程式。執行shell指令碼程式時,系統將建立一個子shell。此時,系統中將有兩個shell,一個是登入時系統啟動的shell,另一個是系統為執行指令碼程式建立的shell。當一個指令碼程式執行完畢,它的指令碼shell將終止,可以返回到執行該指令碼之前的shell。從這種意義上來說,使用者可以有許多 shell,每個shell都是由某個shell(稱為父shell)派生的。子 shell中定義的變數只在該子shell內有效
。如果在一個shell指令碼程式中定義了一個變數,當該指令碼程式執行時,這個定義的變數只是該指令碼程式內的一個區域性變數,其他的shell不能引用它,要使某個變數的值可以在其他shell中被改變,可以使用export命令對已定義的變數進行輸出。 export命令將使系統在建立每一個新的shell時定義這個變數的一個拷貝。這個過程稱之為變數輸出。

Source

source命令:
source命令也稱為“點命令”,也就是一個點符號(.),是bash的內部命令。
功能:使Shell讀入指定的Shell程式檔案並依次執行檔案中的所有語句
source命令通常用於重新執行剛修改的初始化檔案,使之
立即生效而不必登出並重新登入


用法:
source filename 或 . filename
source命令(從 C Shell 而來)是bash shell的內建命令;點命令(.),就是個點符號(從Bourne Shell而來)是source的另一名稱。

source filename 與 sh filename 及./filename執行指令碼的區別在那裡呢?
1.當shell指令碼具有可執行許可權時,用sh filename與./filename執行指令碼是沒有區別得。./filename是因為當前目錄沒有在PATH中,所有"."是用來表示當前目錄的。
2.
sh filename 重新建立一個子shell,在子shell中執行腳本里面的語句,該子shell繼承父shell的環境變數,但子shell新建的、改變的變數不會被帶回父shell,除非使用export


3.source filename:這個命令其實只是簡單地讀取腳本里面的語句依次在當前shell裡面執行,沒有建立新的子shell。那麼腳本里面所有新建、改變變數的語句都會儲存在當前shell裡面

舉例說明:
1.新建一個test.sh指令碼,內容為:A=1
2.然後使其可執行chmod +x test.sh
3.執行sh test.sh後,echo $A,顯示為空,因為A=1並未傳回給當前shell
4.執行./test.sh後,也是一樣的效果
5.執行source test.sh 或者 . test.sh,然後echo $A,則會顯示1,說明A=1的變數在當前shell中
聯絡:

source a.sh 同直接執行./a.sh有什麼不同呢,比如你在一個腳本里export $KKK=111 ,如果你用./a.sh執行該指令碼,執行完畢後,你執行 echo $KKK ,發現沒有值,如果你用source來執行 ,然後再echo ,就會發現KKK=111。因為呼叫./a.sh來執行shell是在一個子shell裡執行的,所以執行後,結構並沒有反應到父shell裡,但是source不同它就是在本shell中執行的,所以可以看到結果



相關推薦

source export聯絡使用

shell與export命令使用者登入到Linux系統後,系統將啟動一個使用者shell。在這個shell中,可以使用shell命令或宣告變數,也可以建立並執行shell指令碼程式。執行shell指令碼程式時,系統將建立一個子shell。此時,系統中將有兩個shell,一個是

Java基礎:&&&,|| |的聯絡區別(詳解及示例)

&與&& 的聯絡與區別 一、&與&&的相同點   &與&& 都可作為 邏輯“與”的運算,即當運算子兩邊表示式結果都為True時,運算結果返回True;否則當某一表達式為False時,運算結果返回False 。

js的import export詳解

node 直接 console 路徑 java strong tro {} 匿名函數 ES6 1.export default 其他模塊加載該模塊時,import命令可以為該匿名函數指定任意名字。 如: import Vue from ‘vue‘ vue裏面的第三方模塊

hashCodeequals的聯絡區別

一、equals方法的作用 1、預設情況(沒有覆蓋equals方法)下equals方法都是呼叫Object類的equals方法,而Object的equals方法主要用於判斷物件的記憶體地址引用是不是同一個地址(是不是同一個物件)。 2 、要是類中覆蓋了equals方法,那麼就要根據具

反捲積、上取樣、上池化的聯絡區別

FCN於反捲積(Deconvolution)、上取樣(UpSampling) https://blog.csdn.net/nijiayan123/article/details/79416764 反捲積(Deconvolution)、上取樣(UNSampling)與上池化(UnPooling

JS:export export default的區別,結合import的用法

export:輸出本模組(一般一個檔案認為是一個模組)提供給外部使用的介面; import:引入其他模組,供本檔案使用,可以引用的就是export輸出的介面;   export有兩種方式:export 或者export default; 兩者的相同點與區別點如下: 1、兩者均可用於匯出常量

constructor&object 的聯絡對比

constructor&object 的聯絡與區別 建構函式與物件 建構函式是類中的特殊成員函式,用於為物件分配記憶體。它可用於為資料成員提供值。建立物件時將呼叫建構函式。它與類具有相同的名稱。建構函式不返回任何值。 建構函式是生成物件的模板,一個建構函式可以生成多個物件,每個物件都有相同的結構

ARM "重定位" "分散載入" 之間的聯絡區別

目前剛剛學完了ARM的裸機部分,有一個問題一直比較困惑:就是 “重定位” 和 “分散載入” 到底是什麼關係? 首先結合S5PV210的啟動方式,iROM(BL0)中的程式執行完之後,將BL1(16K)從SD卡中複製到SRAM中執行,然後把BL2(剩餘的程式)複製到DDR中去執行。把B

Vue.extend和Vue.component的聯絡差異

extend 是構造一個元件的語法器.  你給它引數 他給你一個元件 然後這個元件 你可以作用到Vue.component 這個全域性註冊方法裡, 也可以在任意vue模板裡使用apple元件 var apple = Vue.extend({  ….&n

java List 、Set 、Map集合聯絡區別

List Map Set 集合 一、基礎概念 1. Collection 和 Map 介面 ​ Java集合框架主要由 Collection和Map兩個根介面及其子介面、實現類組成。 ​ 1) Collection 介面是Set、List、和Queue介面的父介面: ​ Coll

C#中的虛方法、抽象方法、抽象類、介面的聯絡區別

虛方法的關鍵字是virtual抽象方法的關鍵字是abstract重寫都是override 虛方法也可以new虛方法和抽象方法的區別:虛方法:可以在抽象類和非抽象類中定義,可以寫在父類中,在子類中可以被重寫,在定義虛方法時必須實現虛方法 (在定義虛方法時需要寫實現方法的程式碼或者至少

Makefile和Cmake的聯絡區別

CMake是一種跨平臺編譯工具,比make更為高階,使用起來要方便得多。CMake主要是編寫CMakeLists.txt檔案,然後用cmake命令將CMakeLists.txt檔案轉化為make所需要的makefile檔案,最後用make命令編譯原始碼生成可執行程式或共享庫(so(shared ob

Constructor&object 的聯絡區別

constructor&object 的聯絡與區別 建構函式與物件 建構函式是類中的特殊成員函式,用於為物件分配記憶體。它可用於為資料成員提供值。建立物件時將呼叫建構函式。它與類具有相同的名稱。建構函式不返回任何值。 建構函式是生成物件的模板,一個建構函式可以生成多個物件,每個物件都有相同的結構

結構體物件的聯絡區別

結構體與物件的聯絡與區別 1.結構體是一種值型別,而類是引用型別。值型別用於儲存資料的值,引用型別用於儲存對實際資料的引用。 那麼結構體就是當成值來使用的,類則通過引用來對實際資料操作。   2.結構使用棧儲存(Stack Allocation),而類使用堆儲存(Heap Allocatio

C和C++的聯絡區別

面向過程的思路:分析解決問題所需的步驟,用函式把這些步驟依次實現。 面向物件的思路:把構成問題的事務分解為各個物件,建立物件的目的,不是完成一個步驟,而是描述某個事務在解決整個問題步驟中的行為。 從上述描述可以看出,其實面向物件和麵向過程是兩種思考解決問題的方式,其差異主要在於思考的角度。

RNN,LSTM和GRU和word2vec及embedding等的聯絡區別解析。

普通的MLP和CNN都沒有事件維度,可以從RNN開始引入了事件維度,這在理解上給我們帶來了一些困難,筆者為了避免遺忘,將這種區別和特點記錄如下。 (沒時間畫圖,就看文字吧,寫的比較簡單。。。) 資料 https://zhuanlan.zhihu.com/p/36455374 這

一級域名(頂級域名),二級域名,主域名,次域名聯絡區別及域名帶不帶www的區別

相關參考文件 域名概念: (英語:Domain Name),簡稱域名、網域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱,用於在資料傳輸時標識計算機的電子方位(有時也指地理位置)。 頂級域名(也叫一級域名,即倒數第一個點的右邊): ***通用頂級域*

模組匯出簡介:module.exportsexport

module.exports module.exports是Node中遵循的CommonJS模組規範。每個檔案就是一個模組。 module代表當前模組;exports代表對外的介面。 Node為每個模組提供了一個exports變數,指向module.exports,(就如同在

export defaultexport的區別

1.export default 和export都可以用於匯出常量,函式,檔案,模組等; 2.可以在模組中通過import+(常量 | 函式 | 檔案 | 模組)名的方式,將其匯入,以便能夠對其進行使用 3.在一個檔案或者模組中,export,import可以有多個,但是export default只能有

資料結構中 線性表,棧,佇列,演算法之間的聯絡區別

一。連結串列為什麼需要         在程式中,經常需要將一種(通常是同為某個型別的)資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄他們,傳進傳出函式等。一組元素可能發生變化(像增加或刪除元素。)