Linux上有多種型別的環境變數。瞭解如何檢視它們,為本地和遠端登入建立它們,並使它們在重新啟動後仍然有效。
啟動終端視窗及其內部的shell時,會引用一組變數,以確保shell配置正確。這些變數還確保終端視窗和shell可能需要引用的任何資訊都可用。總的來說,這些變數儲存的設定定義了在終端視窗中找到的環境,一直到命令提示符的外觀。所以,自然地,它們被稱為環境變數。
一些環境變數是系統範圍的,或者是全域性的。其他人是全會,只能由你看到。其他人無法引用您的會話環境變數。在shell中定義了第三組環境變數。您的區域設定、時區和鍵盤設定、shell嘗試查詢命令時搜尋的目錄集以及預設編輯器都儲存在shell環境變數中。
我們將向您展示如何檢視系統中存在的環境變數,並描述如何建立自己的環境變數。我們還將向您展示如何使它們對子程序可用,以及如何在重新啟動時保持永續性。
當shell啟動時,它會經歷一個初始化階段。此時,它讀取定義shell環境的環境變數。
當程式或命令從稱為子程序的shell啟動時,它會繼承父程序的環境,但請注意!我們將看到,您可以建立不新增到環境中的變數,這樣子程序就不會繼承這些變數。
如果子程序是一個shell,則該shell將從它自己的、新的變數集進行初始化。因此,如果在當前shell中更改命令提示符,然後啟動子shell,子shell將不會繼承父shell修改後的命令提示符。
按照慣例,環境變數的名稱是大寫的。以下是一些全域性環境變數及其包含的值所代表的內容:
相關:如何在Linux上使用pushd和popd
我們可以看到其中一些設定使用的是echo,它將值寫入終端視窗。要檢視環境變數所包含的值,需要在其名稱的開頭新增美元符號($)。
很好的一點是,您可以使用tab completion為您填寫環境變數名稱。鍵入幾個字母的名字和點選標籤。變數的名稱由shell完成。如果沒有發生這種情況,則需要再鍵入幾個字母,以便將環境變數與名稱以相同字母開頭的其他命令區分開來:
echo $SHELL echo $LANG echo $HOME echo $PWD要建立自己的全域性環境變數,請將它們新增到/etc/environment檔案中。您需要使用sudo來編輯此檔案:
sudo gedit /etc/environment要新增環境變數,請鍵入其名稱、等號(=)和希望環境變數保持的值。在等號(=)前後不要空格。環境變數的名稱可以包含字母、下劃線(\)或數字。但是,名稱的第一個字元不能是數字。
如果值中有空格,請確保將整個值用引號(“)括起來。
儲存檔案,然後登出並重新登入。使用echo測試是否存在新變數並儲存您設定的值:
echo $WEBSITE因為它是一個全域性環境變數,每個人都可以使用,所以使用者mary可以在下次登入時引用該環境變數:
echo $WEBSITE要同時檢視所有環境變數,請鍵入printenv。有很多輸出,所以透過管道將其排序,然後將其轉換為更少的輸出是有意義的:
printenv | sort | less環境變數的排序列表以較少的格式顯示。
我們可以透過grep管道輸出與特定主題相關的環境變數。
printenv | grep GNOME相關:如何使用gedit在Linux上以圖形方式編輯文字檔案
這些是bash中用於指示或記錄其行為和功能的一些shell環境變數。使用終端時會更新某些值。例如,COLUMNS環境變數將更新以反映您可能對終端視窗寬度所做的更改:
相關:如何在Linux上使用pushd和popd
讓我們檢查幾個shell變數:
echo $BASH_VERSION echo $HOSTNAME echo $COLUMNS echo $HISTFILESIZE echo $UID為完整起見,以下是可以在命令提示定義中使用的標記:
您將在.bashrc檔案中找到PS1環境變數的定義。
要建立供自己使用的環境變數,請將它們新增到.bashrc檔案的底部。如果您想讓環境變數可用於遠端會話,例如SSH連線,那麼還需要將它們新增到.bash\u概要檔案中。
兩個檔案的環境變數定義格式相同。要向.bash\u配置檔案新增定義,請在主目錄中鍵入以下內容:
gedit .bashrc我們添加了一個名為INHERITED\u VAR的環境變數。請注意行開頭的單詞“export”。
完成編輯後儲存並關閉檔案。您可以登出並重新登入,也可以使用點命令(.)使shell重新讀取.bash\u概要檔案,如下所示:
. .bashrc現在,讓我們在命令列上建立一個環境變數:
LOCAL_VAR="This session only"如果我們使用echo,我們可以看到兩個環境變數都可以訪問:
echo $LOCAL_VAR echo $INHERITED_VAR您將注意到,繼承的\u VAR環境變數的定義在行的開頭有“export”一詞。這意味著環境變數將由當前shell的子程序繼承。如果我們使用bash命令啟動另一個變數,我們可以從子shell內部再次檢查這兩個變數:
bash echo $LOCAL_VAR echo $INHERITED_VAR如您所見,繼承的\u VAR可以在子shell中訪問,但是本地\u VAR不能訪問。我們只得到一個空行。
雖然“export”將環境變數部分新增到子程序繼承的環境中,但繼承的\u VAR不是全域性環境變數。例如,使用者mary不能引用它:
echo $INHERITED_VAR要關閉child bash會話,請使用exit:
exit繼承的環境也會影響指令碼。下面是一個簡單的指令碼,它將三個環境變數的值寫入終端視窗:
#!/bin/bash echo "WEBSITE" $WEBSITE echo "LOCAL_VAR" $LOCAL_VAR echo "INHERITED_VAR" $INHERITED_VAR這被儲存到一個名為環境測試.sh,然後使用以下命令使其可執行:
chmod +x envtest.sh當我們執行指令碼時,它可以訪問三個環境變數中的兩個:
./envtest.sh指令碼可以看到網站全域性環境變數和繼承的匯出的環境變數。即使指令碼在建立變數的同一shell中執行,它也無法訪問本地變數。
如果需要,我們可以從命令列匯出環境變數。我們將對本地的\u VAR執行此操作,然後再次執行指令碼:
export LOCAL_VAR ./envtest.sh環境變數已新增到當前shell的環境中,因此它出現在指令碼繼承的環境中。指令碼也可以引用該環境變數。
遠端登入會話可以訪問全域性環境變數,但是如果您希望本地定義的環境變數可以遠端使用,則必須將它們新增到.bash\u概要檔案中。可以在.bashrc和.bash\u概要檔案中使用不同的值設定相同的環境變數。這可以透過一個指令碼來實現,比如說,為本地或遠端使用系統的使用者修改它的行為。
(冒著混淆問題的風險,還有一個.profile檔案。它也可以儲存環境變數定義。但是,如果存在.bash\u概要檔案,則不會讀取.profile檔案。因此,最安全的方法和bash相容的方法是使用.bash\u概要檔案。)
要編輯.bash\u配置檔案,我們將再次使用gedit:
gedit .bash_profile我們將新增相同的環境變數和之前使用的值。
儲存更改並關閉gedit。
在另一臺計算機上,我們將與測試計算機建立SSH連線。
ssh [email protected]連線後,我們將再次執行指令碼:
./envtest.sh作為遠端登入初始化的一部分,.bash\u概要檔案已經被讀取,我們和指令碼都可以訪問繼承的\u VAR環境變數。
要取消設定環境變數,請使用unset命令。如果我們取消設定全域性環境變數WEBSITE和匯出的環境變數INHERITED\u VAR,它們將不再在命令列或子程序中可用:
unset WEBSITE unset INHERITED_VAR ./envtest.sh echo $WEBSITE需要注意的是,這隻會在本次會話中更改全域性環境變數的可用性。另一個同時登入的人仍然可以訪問該全域性環境變數的例項。他的例項在登入過程中被初始化並從/etc/environment檔案中讀取,並且獨立於其他任何人的變數副本。
例如,使用者mary仍然可以訪問WEBSITE環境變數並讀取其值,即使使用者dave已在其會話中取消設定該變數:
echo $WEBSITE環境變數可以用來讓指令碼和應用程式知道它們應該如何工作。它們可用於儲存設定或少量資料。例如,指令碼可以使用其他指令碼可以引用的值填充環境,而無需將它們寫入檔案。
...lenium WebDriver。在本文中,我們將簡要介紹Selenium,並提供如何在系統上安裝Selenium WebDriver的詳細指南。 ...
...更多的特性。瞭解更多關於Bash-on-Windows的資訊,從您應該如何以及為什麼安裝它,到您可能不知道的隱藏特性。 ...
... 如何在windows10上安裝linux bash shell ...
...改其目錄,您可以控制他們可以訪問哪些命令。下面介紹如何在Linux上設定受限shell。 受限炮彈 受限shell不是另一個shell。這是標準外殼的另一種模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下啟動。在本文中,我們將...
...程式,但在Windows上,您必須為Linux啟用子系統。下面介紹如何在Windows10上安裝和使用LinuxBashshell。 您還需要一個雲*****提供商的帳戶。Algo支援以下所有功能: 數字海洋 亞馬遜輕帆 亞馬遜EC2 外陰 微軟Azure 谷歌計算引擎 巷道 赫...
Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...
...小又簡單。 在使用Linux計算機的第一個小時內,您將學習如何使用Bash和其他shell附帶的cd命令。也許您以前有在其他作業系統上使用它的經驗,不需要解釋。它會改變當前的工作目錄,對嗎?還有什麼要知道的? 好吧,比你想象...
...但這並沒有什麼不好的地方。我們將解釋它的作用,以及如何調整它。 什麼是$path,它是如何工作的($path on linux, and how does it work)? 當您在終端視窗中鍵入一個命令並按Enter鍵時,您甚至在執行命令之前就開始了大量的活動。 B...
...只想在系統有空閒資源時執行程序,可以使用批處理。 如何安排linux作業 cron守護程序維護它在特定時間執行的作業列表。這些任務和程式按預定時間在後臺執行。這為您安排需要重複的任務提供了極大的靈活性。無論您需要...
...在shell中的,因此Bash不必費勁地查詢這些命令。 但是Bash如何定位其他命令、程式和外部獨立二進位制檔案呢?Bash使用路徑,實際上是一組路徑,每個路徑指向一個目錄。然後,它在每個目錄中搜索與您試圖執行的命令或程式匹...