如何在linux上的bash中設定環境變數

Linux上有多種型別的環境變數。瞭解如何檢視它們,為本地和遠端登入建立它們,並使它們在重新啟動後仍然有效。...

Linux上有多種型別的環境變數。瞭解如何檢視它們,為本地和遠端登入建立它們,並使它們在重新啟動後仍然有效。

環境變數的工作原理

啟動終端視窗及其內部的shell時,會引用一組變數,以確保shell配置正確。這些變數還確保終端視窗和shell可能需要引用的任何資訊都可用。總的來說,這些變數儲存的設定定義了在終端視窗中找到的環境,一直到命令提示符的外觀。所以,自然地,它們被稱為環境變數。

一些環境變數是系統範圍的,或者是全域性的。其他人是全會,只能由你看到。其他人無法引用您的會話環境變數。在shell中定義了第三組環境變數。您的區域設定、時區和鍵盤設定、shell嘗試查詢命令時搜尋的目錄集以及預設編輯器都儲存在shell環境變數中。

我們將向您展示如何檢視系統中存在的環境變數,並描述如何建立自己的環境變數。我們還將向您展示如何使它們對子程序可用,以及如何在重新啟動時保持永續性。

環境與遺傳

當shell啟動時,它會經歷一個初始化階段。此時,它讀取定義shell環境的環境變數。

當程式或命令從稱為子程序的shell啟動時,它會繼承父程序的環境,但請注意!我們將看到,您可以建立不新增到環境中的變數,這樣子程序就不會繼承這些變數。

如果子程序是一個shell,則該shell將從它自己的、新的變數集進行初始化。因此,如果在當前shell中更改命令提示符,然後啟動子shell,子shell將不會繼承父shell修改後的命令提示符。

全球環境變數

按照慣例,環境變數的名稱是大寫的。以下是一些全域性環境變數及其包含的值所代表的內容:

  • SHELL:開啟終端視窗時將啟動的SHELL的名稱。在大多數Linux發行版上,這將是bash,除非您將其從預設值更改為bash。
  • 術語:終端視窗實際上是硬體終端的模擬。它包含將被模擬的硬體終端的型別。
  • 使用者:當前使用系統的使用者的使用者名稱。
  • PWD:當前工作目錄的路徑。
  • OLDPWD:移動到當前工作目錄之前所處的目錄。
  • LS\u顏色:LS使用的顏色程式碼列表突出顯示不同的檔案型別。
  • 郵件:如果您的Linux計算機上已經設定了郵件系統(預設情況下不是),那麼它將保留當前使用者郵箱的路徑。
  • PATH:shell將搜尋以查詢命令可執行檔案的目錄列表。
  • 語言、本地化和字元編碼設定。
  • HOME:當前使用者的主目錄。
  • _:underline(\ ux)環境變數儲存最後鍵入的命令。

相關:如何在Linux上使用pushd和popd

我們可以看到其中一些設定使用的是echo,它將值寫入終端視窗。要檢視環境變數所包含的值,需要在其名稱的開頭新增美元符號($)。

很好的一點是,您可以使用tab completion為您填寫環境變數名稱。鍵入幾個字母的名字和點選標籤。變數的名稱由shell完成。如果沒有發生這種情況,則需要再鍵入幾個字母,以便將環境變數與名稱以相同字母開頭的其他命令區分開來:

echo $SHELL echo $LANG echo $HOME echo $PWD

如何在linux上的bash中設定環境變數

要建立自己的全域性環境變數,請將它們新增到/etc/environment檔案中。您需要使用sudo來編輯此檔案:

sudo gedit /etc/environment

如何在linux上的bash中設定環境變數

要新增環境變數,請鍵入其名稱、等號(=)和希望環境變數保持的值。在等號(=)前後不要空格。環境變數的名稱可以包含字母、下劃線(\)或數字。但是,名稱的第一個字元不能是數字。

如果值中有空格,請確保將整個值用引號(“)括起來。

如何在linux上的bash中設定環境變數

儲存檔案,然後登出並重新登入。使用echo測試是否存在新變數並儲存您設定的值:

echo $WEBSITE

如何在linux上的bash中設定環境變數

因為它是一個全域性環境變數,每個人都可以使用,所以使用者mary可以在下次登入時引用該環境變數:

echo $WEBSITE

如何在linux上的bash中設定環境變數

要同時檢視所有環境變數,請鍵入printenv。有很多輸出,所以透過管道將其排序,然後將其轉換為更少的輸出是有意義的:

printenv | sort | less

如何在linux上的bash中設定環境變數

環境變數的排序列表以較少的格式顯示。

如何在linux上的bash中設定環境變數

我們可以透過grep管道輸出與特定主題相關的環境變數。

printenv | grep GNOME

如何在linux上的bash中設定環境變數

相關:如何使用gedit在Linux上以圖形方式編輯文字檔案

shell環境變數

這些是bash中用於指示或記錄其行為和功能的一些shell環境變數。使用終端時會更新某些值。例如,COLUMNS環境變數將更新以反映您可能對終端視窗寬度所做的更改:

  • BASHOPTS:啟動bash時使用的命令列選項。
  • BASH\u版本:BASH版本號是一個由單詞和數字組成的字串。
  • BASH\u VERSINFO:數字形式的BASH版本。
  • 列:終端視窗的當前寬度。
  • DIRSTACK:透過pushd命令新增到目錄堆疊的目錄。
  • HISTFILESIZE:歷史檔案中允許的最大行數。
  • HISTSIZE:記憶體中允許的歷史行數。
  • 主機名:計算機的主機名。
  • IFS:用於在命令列上分隔輸入的內部欄位分隔符。預設情況下,這是一個空格。
  • PS1:PS1環境變數包含主、預設和命令提示符的定義。命令提示符的定義中可以包含一組稱為轉義序列的標記。它們表示主機和使用者名稱、當前工作目錄和時間。
  • PS2:當命令跨越多行並且需要更多輸入時,將顯示輔助命令提示符。PS2環境變數儲存此輔助提示的定義,預設情況下,該提示是大於號(>)。
  • SHELLOPTS:可以使用set選項設定Shell選項。
  • UID:當前使用者的使用者識別符號。

相關:如何在Linux上使用pushd和popd

讓我們檢查幾個shell變數:

echo $BASH_VERSION echo $HOSTNAME echo $COLUMNS echo $HISTFILESIZE echo $UID

如何在linux上的bash中設定環境變數

為完整起見,以下是可以在命令提示定義中使用的標記:

  • \t:當前時間,格式為HH:MM:SS。
  • \d:當前日期,表示為工作日、月、日。
  • \一個新行字元。
  • \學生:你的貝殼的名字。
  • \W:您當前工作目錄的名稱。
  • \w:當前工作目錄的路徑。
  • \u:登入者的使用者名稱。
  • \h:計算機的主機名。
  • \#:shell中的每個命令都有編號。這允許您在命令提示符中檢視命令的編號。這與命令在歷史記錄列表中的編號不同。
  • \$:對於普通使用者,將提示的最後一個字元設定為美元符號($),對於根使用者,將提示的最後一個字元設定為雜湊符號(#)。這是透過檢查使用者的UID來實現的。如果為零,則使用者是root。

您將在.bashrc檔案中找到PS1環境變數的定義。

建立會話環境變數

要建立供自己使用的環境變數,請將它們新增到.bashrc檔案的底部。如果您想讓環境變數可用於遠端會話,例如SSH連線,那麼還需要將它們新增到.bash\u概要檔案中。

兩個檔案的環境變數定義格式相同。要向.bash\u配置檔案新增定義,請在主目錄中鍵入以下內容:

gedit .bashrc

如何在linux上的bash中設定環境變數

我們添加了一個名為INHERITED\u VAR的環境變數。請注意行開頭的單詞“export”。

如何在linux上的bash中設定環境變數

完成編輯後儲存並關閉檔案。您可以登出並重新登入,也可以使用點命令(.)使shell重新讀取.bash\u概要檔案,如下所示:

. .bashrc

如何在linux上的bash中設定環境變數

現在,讓我們在命令列上建立一個環境變數:

LOCAL_VAR="This session only"

如何在linux上的bash中設定環境變數

如果我們使用echo,我們可以看到兩個環境變數都可以訪問:

echo $LOCAL_VAR echo $INHERITED_VAR

如何在linux上的bash中設定環境變數

您將注意到,繼承的\u VAR環境變數的定義在行的開頭有“export”一詞。這意味著環境變數將由當前shell的子程序繼承。如果我們使用bash命令啟動另一個變數,我們可以從子shell內部再次檢查這兩個變數:

bash echo $LOCAL_VAR echo $INHERITED_VAR

如何在linux上的bash中設定環境變數

如您所見,繼承的\u VAR可以在子shell中訪問,但是本地\u VAR不能訪問。我們只得到一個空行。

雖然“export”將環境變數部分新增到子程序繼承的環境中,但繼承的\u VAR不是全域性環境變數。例如,使用者mary不能引用它:

echo $INHERITED_VAR

如何在linux上的bash中設定環境變數

要關閉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

如何在linux上的bash中設定環境變數

指令碼可以看到網站全域性環境變數和繼承的匯出的環境變數。即使指令碼在建立變數的同一shell中執行,它也無法訪問本地變數。

如果需要,我們可以從命令列匯出環境變數。我們將對本地的\u VAR執行此操作,然後再次執行指令碼:

export LOCAL_VAR ./envtest.sh

如何在linux上的bash中設定環境變數

環境變數已新增到當前shell的環境中,因此它出現在指令碼繼承的環境中。指令碼也可以引用該環境變數。

遠端連線

遠端登入會話可以訪問全域性環境變數,但是如果您希望本地定義的環境變數可以遠端使用,則必須將它們新增到.bash\u概要檔案中。可以在.bashrc和.bash\u概要檔案中使用不同的值設定相同的環境變數。這可以透過一個指令碼來實現,比如說,為本地或遠端使用系統的使用者修改它的行為。

(冒著混淆問題的風險,還有一個.profile檔案。它也可以儲存環境變數定義。但是,如果存在.bash\u概要檔案,則不會讀取.profile檔案。因此,最安全的方法和bash相容的方法是使用.bash\u概要檔案。)

要編輯.bash\u配置檔案,我們將再次使用gedit:

gedit .bash_profile

如何在linux上的bash中設定環境變數

我們將新增相同的環境變數和之前使用的值。

如何在linux上的bash中設定環境變數

儲存更改並關閉gedit。

在另一臺計算機上,我們將與測試計算機建立SSH連線。

ssh [email protected]

如何在linux上的bash中設定環境變數

連線後,我們將再次執行指令碼:

./envtest.sh

如何在linux上的bash中設定環境變數

作為遠端登入初始化的一部分,.bash\u概要檔案已經被讀取,我們和指令碼都可以訪問繼承的\u VAR環境變數。

取消設定環境變數

要取消設定環境變數,請使用unset命令。如果我們取消設定全域性環境變數WEBSITE和匯出的環境變數INHERITED\u VAR,它們將不再在命令列或子程序中可用:

unset WEBSITE unset INHERITED_VAR ./envtest.sh echo $WEBSITE

如何在linux上的bash中設定環境變數

需要注意的是,這隻會在本次會話中更改全域性環境變數的可用性。另一個同時登入的人仍然可以訪問該全域性環境變數的例項。他的例項在登入過程中被初始化並從/etc/environment檔案中讀取,並且獨立於其他任何人的變數副本。

例如,使用者mary仍然可以訪問WEBSITE環境變數並讀取其值,即使使用者dave已在其會話中取消設定該變數:

echo $WEBSITE

如何在linux上的bash中設定環境變數

環境控制

環境變數可以用來讓指令碼和應用程式知道它們應該如何工作。它們可用於儲存設定或少量資料。例如,指令碼可以使用其他指令碼可以引用的值填充環境,而無需將它們寫入檔案。

  • 發表於 2021-04-02 06:44
  • 閱讀 ( 58 )
  • 分類:網際網路

你可能感興趣的文章

如何在任何使用python的計算機上安裝selenium webdriver

...lenium WebDriver。在本文中,我們將簡要介紹Selenium,並提供如何在系統上安裝Selenium WebDriver的詳細指南。 ...

  • 發佈於 2021-03-10 21:27
  • 閲讀 ( 64 )

最好的,最快的,最堅固的usb快閃記憶體驅動器,你可以現在購買

...更多的特性。瞭解更多關於Bash-on-Windows的資訊,從您應該如何以及為什麼安裝它,到您可能不知道的隱藏特性。 ...

  • 發佈於 2021-03-17 01:06
  • 閲讀 ( 51 )

如何在windows10上獲得linux bash shell

... 如何在windows10上安裝linux bash shell ...

  • 發佈於 2021-03-21 11:48
  • 閲讀 ( 60 )

如何使用受限shell來限制linux使用者可以做什麼

...改其目錄,您可以控制他們可以訪問哪些命令。下面介紹如何在Linux上設定受限shell。 受限炮彈 受限shell不是另一個shell。這是標準外殼的另一種模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下啟動。在本文中,我們將...

  • 發佈於 2021-03-31 10:57
  • 閲讀 ( 56 )

如何用algo和雲託管來託管你自己的vpn

...程式,但在Windows上,您必須為Linux啟用子系統。下面介紹如何在Windows10上安裝和使用LinuxBashshell。 您還需要一個雲*****提供商的帳戶。Algo支援以下所有功能: 數字海洋 亞馬遜輕帆 亞馬遜EC2 外陰 微軟Azure 谷歌計算引擎 巷道 赫...

  • 發佈於 2021-04-02 01:34
  • 閲讀 ( 59 )

如何使用chsh在linux上更改預設shell

Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...

  • 發佈於 2021-04-02 06:04
  • 閲讀 ( 66 )

如何在linux上使用cd命令

...小又簡單。 在使用Linux計算機的第一個小時內,您將學習如何使用Bash和其他shell附帶的cd命令。也許您以前有在其他作業系統上使用它的經驗,不需要解釋。它會改變當前的工作目錄,對嗎?還有什麼要知道的? 好吧,比你想象...

  • 發佈於 2021-04-02 08:58
  • 閲讀 ( 67 )

如何在linux中向$path新增目錄

...但這並沒有什麼不好的地方。我們將解釋它的作用,以及如何調整它。 什麼是$path,它是如何工作的($path on linux, and how does it work)? 當您在終端視窗中鍵入一個命令並按Enter鍵時,您甚至在執行命令之前就開始了大量的活動。 B...

  • 發佈於 2021-04-02 14:04
  • 閲讀 ( 44 )

如何在linux上使用at和batch來排程命令

...只想在系統有空閒資源時執行程序,可以使用批處理。 如何安排linux作業 cron守護程序維護它在特定時間執行的作業列表。這些任務和程式按預定時間在後臺執行。這為您安排需要重複的任務提供了極大的靈活性。無論您需要...

  • 發佈於 2021-04-02 18:33
  • 閲讀 ( 69 )

linux下如何使用which命令

...在shell中的,因此Bash不必費勁地查詢這些命令。 但是Bash如何定位其他命令、程式和外部獨立二進位制檔案呢?Bash使用路徑,實際上是一組路徑,每個路徑指向一個目錄。然後,它在每個目錄中搜索與您試圖執行的命令或程式匹...

  • 發佈於 2021-04-02 20:07
  • 閲讀 ( 50 )
F76332477
F76332477

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦