基礎命令學習目錄首頁html
export 的基本做用就是將父shell中的局部變量設置爲環境變量,使得該變量能夠在子shell中使用。下面設置兩種情景對export進行原理解析。
情景
1. 有一個名爲myexport.sh的腳本,內容以下:
#!/bin/sh
export MY_PATH=/usr/local12
在linux環境中打開終端運行該shell
$sh myexport.sh
$echo $MY_PATH
$123
運行該shell後在終端沒法看到該環境變量的值。
- 在一個終端用export設置環境變量後再其餘終端不可見。
緣由
首先要提到進程,進程是一個運行着的程序,是代碼的動態形式,進程有以下屬性:
獨立的內核堆棧
進程控制塊
獨立的存儲空間
因爲每一個進程有本身獨立的存儲空間,因此進程間的的數據是不可見的,進程間的交互須要用到進程間通訊。每個shell都是一個獨立的進程,因此在一個進程內的操做一般不會影響到另外一個進程的內容,也不會被另外一個進程所看到。因此上面第二種情景中,不一樣的終端開啓了不一樣的shell,這些終端是相互獨立的進程,彼此不管如何設置環境變量,相互都是不可見的。(寫入到系統配置文件中的環境變量那就是通訊了。)
export命令用於將父shell的局部變量全局化,這種全局化的意思就是讓子shell可見。在父shell中執行一個子shell,會啓動一個新的進行——子進程,故子shell便是一個獨立於父shell的進程,父子shell的存儲空間是相互不可見的(即子shell看不到父shell中的變量),若是想讓子shell看到父shell的變量就須要將該變量從父shell的獨立存儲空間複製到子shell的獨立存儲空間,子shell看到的變量實際上是本身進程空間的內容,而不是父進程的內容,只不過這另個空間的變量的名稱和值相同而已。故export並無採用什麼高深的技術,只是將父進程空間的內容複製到子進程而已。
Linux中的父子進程是說父進程能夠管理子進程,這種管理主要體如今三個方面:生、管、死,即父進程能夠建立子進程,能夠把上面export的例子算做一種管理吧,父進程死則子進程必須死,子進程死對父進程沒有影響。其實除了生死以外,父子進程都是獨立的進程。(父進程能夠生子進程,爲何不叫母進程呢?英文是 parent process,可不是 father process 。這個涉及到了歷史和文化問題,不討論了。)
結果
那麼問題來了,如何將情景1中的myexport.sh中的環境變量導入到當前進程中來呢?首先說明,父進程能夠將本身的環境變量寫入到子進程的空間中,可是子進程沒法將本身空間的數據寫入到父進程中(至少export命令作不到)。那麼想要讓子shell中的變量在父shell可見,最好的辦法就是不要成爲子shell,即只將該shell的內容導入到」父「shell中,而不執行該shell。這樣用到的導入命令是」.」 和 」source「,這就相似於c語言中的」#include」,用法以下:
$. myexport.sh # or $source myexport.sh
$echo $MY_PATH
/usr/local
---------------------
做者:如有所思HS
來源:CSDN
原文:https://blog.csdn.net/u012150792/article/details/50583972
版權聲明:本文爲博主原創文章,轉載請附上博文連接!
經常使用用法
# 功能說明:設置或顯示環境變量。
# export [-fnp][變量名稱]=[變量設置值]
# 只在本次登陸中有效
# 再增長的路徑用:追加
export PATH=$PATH:/home/jason001123456
說明
在shell中執行程序時,shell會提供一組環境變量。export可新增,修改或刪除環境變量,供後續執行的程序使用。export的效力僅及於該此登錄操做。
參數:
-f 表明[變量名稱]中爲函數名稱。
-n 刪除指定的變量。變量實際上並未刪除,只是不會輸出到後續指令的執行環境中。
-p 列出全部的shell賦予程序的環境變量123
延伸
export設置環境變量是暫時的,只在本次登陸中有效,可修改以下文件來使命令長久有效。
1. 修改profile文件
#vi /etc/profile1
在裏面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"1
這個在咱們的機器上是你們共用的,建議不修改這個,只修改本身根路徑下的。
2. 修改本id根路徑下的.bashrc或.bash_profile文件:
# vi /home/zhaodw/.bash_profile1
在裏面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"1
注意: 一、執行腳本時是在一個子shell環境運行的,腳本執行完後該子shell自動退出; 二、一個shell中的系統環境變量纔會被複制到子shell中(用export定義的變量); 三、一個shell中的系統環境變量只對該shell或者它的子shell有效,該shell結束時變量消失(並不能返回到父shell中)。 四、不用export定義的變量只對該shell有效,對子shell也是無效的。 --------------------- 做者:jason_cuijiahui 來源:CSDN 原文:https://blog.csdn.net/jason_cuijiahui/article/details/79408778 版權聲明:本文爲博主原創文章,轉載請附上博文連接!