Bash 環境變量

    Bash 環境變量shell

     本篇文章是博主在瀏覽電魚電子科技有限公司主頁所得,初學者能夠在此教程中瞭解環境變量。如有不明之處,博主回覆不及時,也可自主登錄電魚電子自行了解。www.dianyu.netvim

bash 變量,尤爲是討厭的環境變量,已是一個老生常談的話題了。咱們也更應該對它有一個詳細的瞭解,讓它爲咱們所用。下面就打開終端,開始吧。安全

 

環境變量bash

 

HOME (LCTT 譯註:雙關語)除了是你脫下帽子愜意休息的地方,同時也是 Linux 中的一個變量,它是當前用戶主目錄的路徑:編輯器

 

echo $HOME.net

以上這個命令會顯示當前用戶的主目錄路徑,一般都在 /home/<your username> 下。繼承

 

顧名思義,變量的值是能夠根據上下文變化的。實際上,Linux 系統中每個用戶的 HOME 變量都是不同的,固然你也能夠這樣自行更改 HOME 變量的值:教程

 

HOME=/home/<your username>/Documentsit

以上這個命令將會把 HOME 變量設置爲你的 Documents 目錄。變量

 

其中有三點須要留意:

 

1.= 符號和其兩側的內容之間不加空格。空格在 shell 中有專門的意義,不能隨意地在任何地方添加空格。

2.若是你須要對變量進行賦值,只須要使用變量名稱就能夠了。但若是須要讀取或者使用變量的值,須要在變量前面加上一個 $ 號。

3.更改 HOME 變量具備必定的風險。有不少程序是依賴於 HOME 變量的,更改 HOME 變量可能會致使一些不可預見的結果。例如,若是按照上面的方式更改了 HOME 變量,而後執行不帶有任何參數的 cd 命令,在一般狀況下,會跳轉到用戶的主目錄下,但在這個時候,會跳轉到 HOME 變量指定的目錄下。

上面第 3 點中環境變量的更改並非持久有效的,在終端關閉後從新打開終端,又或者是新建一個終端,執行 echo $HOME 命令輸出的仍然會是初始的值,而不是從新自定義的值。

 

在討論如何持久地更改一個環境變量以前,咱們先來看一下另外一個比較重要的環境變量。

 

PATH 變量

 

在 PATH 變量中存放了一系列目錄,並且是放置了可執行程序的目錄。正是因爲 PATH 變量的存在,讓你不須要知道應用程序具體安裝到了什麼目錄,而 shell 卻能夠正確地找到這些應用程序。

 

若是你查看 PATH 變量的值,大概會是如下這樣:

 

$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin

每兩個目錄之間使用冒號 : 分隔。若是某個應用程序的所在目錄不在 PATH 變量中,那麼運行的時候就須要聲明應用程序的目錄讓 shell 可以找到。

 

/home/<user name>/bin/my_program.sh

例如以上命令就會執行當前用戶 bin/ 目錄下的 my_program.sh 文件。

 

有一個常見的問題:若是你不但願弄亂系統的 bin/ 目錄,同時也不但願你本身的文件被其它人運行,還不想每次運行的時候都要輸入完整的路徑,那麼,你能夠在你的主目錄中建立一個獨立的 bin/ 目錄:

 

mkdir $HOME/bin

而後將這個目錄添加到 PATH 變量中:

 

PATH=$PATH:$HOME/bin

而後 /home/<user name>/bin/ 目錄就會出如今 PATH 變量中了。但正如以前所說,這個變動只會在當前的 shell 生效,當前的 shell 一旦關閉,環境變量的值就又恢復原狀了。

 

若是要讓變動對當前用戶持續生效,就不能在 shell 中直接執行對應的變動,而是應該將這些變動操做寫在每次啓動 shell 時都會運行的文件當中。這個文件就是當前用戶主目錄中的 .bashrc 文件。文件名前面的點號代表這是一個隱藏文件,執行普通的 ls 命令是不會將這個文件顯示出來的,但只要在 ls 命令中加入 -a 參數就能夠看到這個文件了。

 

你可使用諸如 kate、gedit、nano 或者 vim 這些文本編輯器來打開 .bashrc 文件(但不要用 LibreOffice Writer,它是一個文字處理軟件,跟前面幾個文字編輯器徹底不一樣)。打開 .bashrc 文件以後,你會看見裏面放置了一些 shell 命令,是用於爲當前用戶設置環境的。

 

在文件的末尾添加新行並輸入如下內容:

 

export PATH=$PATH:$HOME/bin

保存並關閉 .bashrc 文件,接下來你就會看到 export 語句的效果。執行如下的命令讓剛纔的修改當即生效:

 

source .bashrc

剛纔執行的 source 命令讓 .bashrc 文件在當前的 shell 當即生效,而且對於以後打開的 shell 都會有效。所以另外一個等效的方法是退出並從新進入 shell,但這樣也太麻煩了。

 

如今,你的 shell 就能自動尋找到 /home/<user name>/bin/ 下的程序了,執行這個目錄下的程序也不須要完整地寫出程序的路徑。

 

自定義變量

 

固然,你也能夠定義本身的變量。剛纔咱們看到的變量名稱都是全大寫的,實際上變量名稱的定義仍是比較靈活的。

 

定義新變量的過程很是直觀,直接對它賦值就能夠了:

 

new_variable="Hello"

而後能夠用如下的方式讀取到已定義變量的值:

 

echo $new_variable

程序的正常工做離不開各類變量,例如要將某個選項設置爲打開,又或者讓程序找到所需的代碼庫,都須要使用變量。在 bash 中運行程序的時候會生成一個子 shell,這個子 shell 和執行原程序的父 shell 並非徹底同樣的,只是繼承了父 shell 的部份內容,並且默認是不繼承父 shell 中的變量的。由於變量默認狀況下是局部變量,出於安全緣由,一個 shell 中的局部變量不會被另外一個 shell 讀取到,即便是子 shell 也不能夠。

 

下面舉一個例子。首先定義一個變量:

 

robots="R2D2 & C3PO"

而後執行:

 

bash

如今是在 bash shell 中建立了一個子 shell。

 

執行這個命令看看還能不能讀取到剛纔定義的變量:

 

echo $robots

你會發現讀取不到。

 

仍是在這個子 shell 中,爲 robots 變量賦一個不一樣的值:

 

robots="These aren't the ones you are looking for"

再讀取一次:

 

$ echo $robots

These aren't the ones you are looking for

退出這個子 shell:

 

exit

而後再看一下如今 robots 變量的值:

 

$ echo $robots

R2D2 & C3P0

這一個特性能夠有效避免配置過程當中產生混亂,同時也會致使一個問題:若是程序中須要設置變量,但卻因爲子 shell 的緣由沒法正常訪問到這個變量,該如何解決呢?這個時候就須要用到 export 了。

 

重複一次剛纔的過程,但這一次不是經過 robots="R2D2 & C3PO" 方式來設置變量,而是使用 export 命令:

 

export robots="R2D2 & C3PO"

如今你會發現,在進入子 shell 以後,robots 變量的值仍然是最初賦予的值。

 

要注意的是,儘管子 shell 會繼承經過 export 導出的變量,但若是在子 shell 中對這個變量從新賦值,是不會影響到父 shell 中對應變量的。

 

若是要查看全部經過 export 導出的變量,能夠執行如下命令:

 

export -p

自定義的變量會顯示在這個列表的末尾。這個列表中還有一些常見的變量:例如 USER 的值是當前用戶的用戶名,PWD 的值是當前用戶當前所在的目錄,而 OLDPWD 的值則是當前用戶上一個訪問過的目錄。所以若是執行:

 

cd -

就會切換到上一個訪問過的目錄,那是由於 cd 命令讀取到了 OLDPWD 變量的值。

 

你也可使用 env 命令查看全部環境變量。

 

若是要取消導出一個變量,能夠加上 -n 參數:

 

export -n robots

接下來

 

瞭解過環境變量的知識以後,你已經到達了可能對本身和他人形成危險的水平,接下來就須要瞭解如何經過使用別名來讓環境變得更安全、更友好以保護本身了。

相關文章
相關標籤/搜索