自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Bash環(huán)境變量的那些事

系統(tǒng) Linux
bash 變量,尤其是討厭的環(huán)境變量,已經(jīng)是一個老生常談的話題了。我們也更應(yīng)該對它有一個詳細(xì)的了解,讓它為我們所用。

[[253250]]

初學(xué)者可以在此教程中了解環(huán)境變量。

bash 變量,尤其是討厭的環(huán)境變量,已經(jīng)是一個老生常談的話題了。我們也更應(yīng)該對它有一個詳細(xì)的了解,讓它為我們所用。

下面就打開終端,開始吧。

環(huán)境變量

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

  1. echo $HOME

以上這個命令會顯示當(dāng)前用戶的主目錄路徑,通常都在 /home/<your username> 下。

顧名思義,變量的值是可以根據(jù)上下文變化的。實際上,Linux 系統(tǒng)中每一個用戶的 HOME 變量都是不一樣的,當(dāng)然你也可以這樣自行更改 HOME 變量的值:

  1. HOME=/home/<your username>/Documents

以上這個命令將會把 HOME 變量設(shè)置為你的 Documents 目錄。

其中有三點需要留意:

  1. = 符號和其兩側(cè)的內(nèi)容之間不加空格??崭裨?shell 中有專門的意義,不能隨意地在任何地方添加空格。
  2. 如果你需要對變量進行賦值,只需要使用變量名稱就可以了。但如果需要讀取或者使用變量的值,需要在變量前面加上一個 $ 號。
  3. 更改 HOME 變量具有一定的風(fēng)險。有很多程序是依賴于 HOME 變量的,更改 HOME 變量可能會導(dǎo)致一些不可預(yù)見的結(jié)果。例如,如果按照上面的方式更改了 HOME 變量,然后執(zhí)行不帶有任何參數(shù)的 cd 命令,在通常情況下,會跳轉(zhuǎn)到用戶的主目錄下,但在這個時候,會跳轉(zhuǎn)到 HOME 變量指定的目錄下。

上面第 3 點中環(huán)境變量的更改并不是持久有效的,在終端關(guān)閉后重新打開終端,又或者是新建一個終端,執(zhí)行 echo $HOME 命令輸出的仍然會是初始的值,而不是重新自定義的值。

在討論如何持久地更改一個環(huán)境變量之前,我們先來看一下另一個比較重要的環(huán)境變量。

PATH 變量

PATH 變量中存放了一系列目錄,而且是放置了可執(zhí)行程序的目錄。正是由于 PATH 變量的存在,讓你不需要知道應(yīng)用程序具體安裝到了什么目錄,而 shell 卻可以正確地找到這些應(yīng)用程序。

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

  1. $ echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin

每兩個目錄之間使用冒號 : 分隔。如果某個應(yīng)用程序的所在目錄不在 PATH 變量中,那么運行的時候就需要聲明應(yīng)用程序的目錄讓 shell 能夠找到。

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

例如以上命令就會執(zhí)行當(dāng)前用戶 bin/ 目錄下的 my_program.sh 文件。

有一個常見的問題:如果你不希望弄亂系統(tǒng)的 bin/ 目錄,同時也不希望你自己的文件被其它人運行,還不想每次運行的時候都要輸入完整的路徑,那么,你可以在你的主目錄中創(chuàng)建一個獨立的 bin/ 目錄:

  1. mkdir $HOME/bin

然后將這個目錄添加到 PATH 變量中:

  1. PATH=$PATH:$HOME/bin

然后 /home/<user name>/bin/ 目錄就會出現(xiàn)在 PATH 變量中了。但正如之前所說,這個變更只會在當(dāng)前的 shell 生效,當(dāng)前的 shell 一旦關(guān)閉,環(huán)境變量的值就又恢復(fù)原狀了。

如果要讓變更對當(dāng)前用戶持續(xù)生效,就不能在 shell 中直接執(zhí)行對應(yīng)的變更,而是應(yīng)該將這些變更操作寫在每次啟動 shell 時都會運行的文件當(dāng)中。這個文件就是當(dāng)前用戶主目錄中的 .bashrc 文件。文件名前面的點號表明這是一個隱藏文件,執(zhí)行普通的 ls 命令是不會將這個文件顯示出來的,但只要在 ls 命令中加入 -a 參數(shù)就可以看到這個文件了。

你可以使用諸如 kate、gedit、nano 或者 vim 這些文本編輯器來打開 .bashrc 文件(但不要用 LibreOffice Writer,它是一個文字處理軟件,跟前面幾個文字編輯器完全不同)。打開 .bashrc 文件之后,你會看見里面放置了一些 shell 命令,是用于為當(dāng)前用戶設(shè)置環(huán)境的。

在文件的末尾添加新行并輸入以下內(nèi)容:

  1. export PATH=$PATH:$HOME/bin

保存并關(guān)閉 .bashrc 文件,接下來你就會看到 export 語句的效果。執(zhí)行以下的命令讓剛才的修改立即生效:

  1. source .bashrc

剛才執(zhí)行的 source 命令讓 .bashrc 文件在當(dāng)前的 shell 立即生效,并且對于之后打開的 shell 都會有效。因此另一個等效的方法是退出并重新進入 shell,但這樣也太麻煩了。

現(xiàn)在,你的 shell 就能自動尋找到 /home/<user name>/bin/ 下的程序了,執(zhí)行這個目錄下的程序也不需要完整地寫出程序的路徑。

自定義變量

當(dāng)然,你也可以定義自己的變量。剛才我們看到的變量名稱都是全大寫的,實際上變量名稱的定義還是比較靈活的。

定義新變量的過程非常直觀,直接對它賦值就可以了:

  1. new_variable="Hello"

然后可以用以下的方式讀取到已定義變量的值:

  1. echo $new_variable

程序的正常工作離不開各種變量,例如要將某個選項設(shè)置為打開,又或者讓程序找到所需的代碼庫,都需要使用變量。在 bash 中運行程序的時候會生成一個子 shell,這個子 shell 和執(zhí)行原程序的父 shell 并不是完全一樣的,只是繼承了父 shell 的部分內(nèi)容,而且默認(rèn)是不繼承父 shell 中的變量的。因為變量默認(rèn)情況下是局部變量,出于安全原因,一個 shell 中的局部變量不會被另一個 shell 讀取到,即使是子 shell 也不可以。

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

  1. robots="R2D2 & C3PO"

然后執(zhí)行:

  1. bash

現(xiàn)在是在 bash shell 中創(chuàng)建了一個子 shell。

執(zhí)行這個命令看看還能不能讀取到剛才定義的變量:

  1. echo $robots

你會發(fā)現(xiàn)讀取不到。

還是在這個子 shell 中,為 robots 變量賦一個不同的值:

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

再讀取一次:

  1. $ echo $robots
  2. These aren't the ones you are looking for

退出這個子 shell:

  1. exit

然后再看一下現(xiàn)在 robots 變量的值:

  1. $ echo $robots
  2. R2D2 & C3P0

這一個特性可以有效避免配置過程中產(chǎn)生混亂,同時也會導(dǎo)致一個問題:如果程序中需要設(shè)置變量,但卻由于子 shell 的原因無法正常訪問到這個變量,該如何解決呢?這個時候就需要用到 export 了。

重復(fù)一次剛才的過程,但這一次不是通過 robots="R2D2 & C3PO" 方式來設(shè)置變量,而是使用 export 命令:

  1. export robots="R2D2 & C3PO"

現(xiàn)在你會發(fā)現(xiàn),在進入子 shell 之后,robots 變量的值仍然是最初賦予的值。

要注意的是,盡管子 shell 會繼承通過 export 導(dǎo)出的變量,但如果在子 shell 中對這個變量重新賦值,是不會影響到父 shell 中對應(yīng)變量的。

如果要查看所有通過 export 導(dǎo)出的變量,可以執(zhí)行以下命令:

  1. export -p

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

  1. cd -

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

你也可以使用 env 命令查看所有環(huán)境變量。

如果要取消導(dǎo)出一個變量,可以加上 -n 參數(shù):

  1. export -n robots

接下來

了解過環(huán)境變量的知識之后,你已經(jīng)到達(dá)了可能對自己和他人造成危險的水平,接下來就需要了解如何通過使用別名來讓環(huán)境變得更安全、更友好以保護自己了。 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2009-06-15 16:28:30

JAVA環(huán)境變量

2011-05-31 13:41:50

Android 環(huán)境變量

2015-08-10 14:37:27

LinuxBash環(huán)境變量

2012-09-18 01:22:33

Java環(huán)境變量Classpath

2023-11-01 13:40:25

GolangGo

2021-02-15 15:52:27

Linux環(huán)境變量命令

2021-06-18 08:43:20

環(huán)境變量Linux

2009-07-03 16:13:10

JSP環(huán)境變量

2010-04-27 18:30:42

AIX系統(tǒng)

2020-08-05 09:48:20

Docker容器工具

2009-07-03 16:46:07

JSP環(huán)境變量

2009-07-07 12:48:29

JDK環(huán)境變量設(shè)置

2010-10-11 09:25:31

MySQL環(huán)境變量

2010-04-21 16:58:51

Unix環(huán)境變量

2009-07-07 13:44:35

JDK環(huán)境變量設(shè)置

2009-10-21 12:58:18

2019-09-09 09:02:04

Linux腳本語言文本編輯器

2021-11-29 10:25:16

Linux環(huán)境變量命令

2011-12-21 10:46:17

Java

2009-06-29 15:06:23

環(huán)境變量配置Java
點贊
收藏

51CTO技術(shù)棧公眾號