在 Linux 中設置和列出環境變量

在基於 Linux 的系統中,您可以將動態命名值設置為環境變量。 這些值存儲在系統中並由命令行應用程序使用。 簡單來說,環境變量就是一個有名字和關聯值的變量。 變量是表示值的符號、字母或單詞,例如“x”或“y”。

環境變量可以存儲有關默認文本編輯器或瀏覽器的信息、可執行文件的路徑等…

環境變量在程序及其子程序中是全局可用的。 shell 變量僅在當前 shell 中可用。

在本教程中,我們將解釋如何列出和設置環境和 shell 變量。

環境變量

環境變量是在系統範圍內可用的變量,並由所有衍生的子進程和 shell 繼承。

環境變量實現為表示鍵值對的字符串。 如果傳遞多個值,它們通常用冒號 (:) 字符分隔。 每對通常看起來像這樣:

KEY=value1:value2:value3

變量的名稱區分大小寫,通常以大寫格式使用(MYVAR1、MYVAR2…)

如果值包含空格,則使用引號:

KEY="value with spaces"

殼變量

Shell 變量是專門包含在設置或定義它們的 Shell 中的變量。 每個 shell,例如 zsh 和 bash, 有自己的一組內部 shell 變量。 它們通常用於跟踪臨時數據,例如當前工作目錄。 用法與全局環境變量相同。

要使 shell 變量可用作環境變量,請使用 export MYVAR:

$ export MYVAR=linoxide.com
$ echo $MYVAR
linoxide.com
$ env | grep MYVAR
MYVAR=linoxide.com

常見的環境變量和殼變量

一些環境變量和 shell 變量非常有用並且經常被引用。 以下是您會遇到的一些常見環境變量:

學期這指定了在運行 shell 時要模擬的終端類型。 可以針對不同的操作要求模擬不同的硬件終端。 不過,您通常不需要擔心這一點。
用戶當前登錄的用戶。
殘疾人士當前工作目錄。
OLDPWD之前的工作目錄。 這是由 shell 保存的,以便通過運行 cd – 切換回之前的目錄。
LS_顏色這定義了用於選擇性地將彩色輸出添加到 ls 命令的顏色代碼。 這用於區分不同的文件類型,並一目了然地為用戶提供更多信息。
郵件當前用戶郵箱的路徑。
小路系統在查找命令時將檢查的目錄列表。 當用戶輸入命令時,系統將按此順序檢查目錄中的可執行文件。
當前語言和本地化設置,包括字符編碼。
當前用戶的主目錄。
_最近執行的命令。

除了這些環境變量之外,您經常會看到的一些 shell 變量是:

巴斯夫使用的選項列表 bash 被處決。 這對於確定 shell 環境是否會按照您希望的方式運行非常有用。
BASH_VERSION的版本 bash 以人類可讀的形式執行。
BASH_VERSINFO的版本 bash, 在機器可讀的輸出中。
用於在屏幕上繪製輸出的列寬。
直接堆棧pushd 和 popd 命令可用的目錄堆棧。
歷史文件大小存儲到文件中的命令歷史記錄的行數。
歷史大小內存中允許的命令歷史行數。
主機名此時計算機的主機名。
國際金融中心用於分隔命令行輸入的內部字段分隔符。 默認情況下,這是一個空格。
PS1主要命令提示符定義。 這用於定義啟動 shell 會話時提示的外觀。 PS2 用於聲明命令跨越多行時的輔助提示。
貝殼類可以使用 set 選項設置的 Shell 選項。
用戶識別碼當前用戶的 UID。

列出 Shell 和環境變量

有幾個命令可以讓你在 Linux 中列出環境變量:

env – 該命令允許您在自定義環境中運行另一個程序,而無需修改當前程序。 當不帶參數使用時,它將打印當前環境變量的列表。
printenv – 該命令打印所有或指定的環境變量。
set – 該命令設置或取消設置 shell 變量。 當不帶參數使用時,它將打印所有變量的列表,包括環境和 shell 變量,以及 shell 函數。

在默認狀態下, env 和 printenv 的功能應該完全相同:

$ printenv
SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=C.UTF-8
XDG_SESSION_ID=5
USER=vagrant
MYVAR=linoxide.com
PWD=/home/vagrant
HOME=/home/vagrant
SSH_CLIENT=10.0.2.2 37182 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/vagrant
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LOGNAME=vagrant
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LESSOPEN=| /usr/bin/lesspipe %s
_=/usr/bin/printenv

env 和 ‘printenv’ 命令之間的區別僅體現在它們更具體的功能上。 例如,使用“printenv”,您可以請求各個變量的值:

$ printenv SHELL
/bin/bash
$ printenv HOME
/home/vagrant
$ printenv MYVAR
linoxide.com

env 命令允許您通過將一組變量傳遞給命令來修改程序運行的環境:

env MYVAR=linoxide.com command_to_run command_options

printenv 和 env 命令僅打印環境變量。 如果您想獲取所有變量的列表,包括環境和 shell 變量,以及 shell 函數,您可以使用 set 命令:

$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="8")
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.4.20(1)-release'
COLUMNS=140
DIRSTACK=()
EUID=1000
GROUPS=()
HISTCONTROL=ignoreboth
HISTFILE=/home/vagrant/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/vagrant
HOSTNAME=ubuntu-bionic
HOSTTYPE=x86_64
IFS=

該命令將顯示所有變量的大列表,因此您可能希望將輸出通過管道傳輸到 less 命令。

set | less

設置外殼和環境變量

在 Linux 中可用於設置環境變量的命令有:

set – 該命令設置或取消設置 shell 變量。 當不帶參數使用時,它將打印所有變量的列表,包括環境和 shell 變量,以及 shell 函數。
unset – 該命令刪除 shell 和環境變量。
export – 該命令設置環境變量。

為了更好地理解 shell 和環境變量之間的區別,我們將從設置 shell 變量開始,然後轉到環境變量。

我們將首先在當前會話中定義一個 shell 變量。 您可以使用 echo $MYVAR 驗證該變量是否已設置

$ MYVAR=Linoxide
$ echo $MYVAR
Linoxide

使用 printenv 命令檢查此變量是否為環境變量:

$ printenv MYVAR

不應返回任何輸出。 這意味著 MYVAR 變量不是環境變量。

export 命令用於設置環境變量。

要創建環境變量,只需將 shell 變量導出為環境變量:

$ export MYVAR

您可以通過運行來檢查:

$ printenv MYVAR
Linoxide

您還可以在一行中設置環境變量:

$ export MYNEWVAR="My New Variable"

以這種方式創建的環境變量僅適用於當前會話。 如果您打開一個新的 shell,或者如果您註銷,所有變量都將丟失。

我們還可以將環境變量恢復為 shell 變量,甚至完全(取消設置)刪除它:

我們的 MYVAR 變量被定義為環境變量。 我們可以通過鍵入以下內容將其改回 shell 變量:

$ export -n MYVAR

它不再是一個環境變量,但是,它仍然是一個 shell 變量。

如果我們想完全取消設置一個變量,無論是 shell 還是環境變量,我們可以使用 unset 命令來實現:

$ unset MYVAR

我們可以驗證它不再被設置:

$ echo $MYVAR

由於未設置變量,因此不會返回任何內容。

持久環境變量

我們已經提到許多程序使用環境變量來決定如何操作的細節。 我們不想每次啟動新的 shell 會話時都必須設置重要的變量,
這 bash shell 根據會話的啟動方式讀取不同的配置文件。
交互式 shell 會話是附加到終端的 shell 會話。 非交互式 shell 會話是不附加到終端會話的會話。

不同會話之間的一個區別是 shell 是作為“登錄”會話還是“非登錄”會話生成的。

在大多數 Linux 發行版中,當您啟動新會話時,環境變量將從以下文件中讀取:

/etc/環境 – 使用此文件設置系統範圍的環境變量。

/etc/配置文件 – 每次加載此文件中設置的變量 bash 登錄外殼被輸入。

~/.bashrc – 每用戶外殼特定的配置文件。 為了 example,如果您使用 Bash,則可以在那裡聲明變量。

要將新的環境變量加載到當前的 shell 會話中,請使用 source 命令:

$ source ~/.bashrc

如果您需要設置系統範圍的變量,您可能需要考慮將它們添加到 /etc/配置文件, /等等/bash.bashrc, 或者 /etc/環境.

結論

在本教程中,我們學習瞭如何設置和列出環境和 shell 變量。 這些變量始終存在於您的 shell 會話中,並且對許多程序非常有用。 還有許多其他更平凡但更常見的場景,您需要閱讀或更改系統環境。 如果您有任何問題,請隨時在下面的評論中留言。

tn' LANG=C.UTF-8 LESSCLOSE='/usr/bin/lesspipe %s %s' LESSOPEN='| /usr/bin/lesspipe %s' LINES=35 LOGNAME=vagrant .....

該命令將顯示所有變量的大列表,因此您可能希望將輸出通過管道傳輸到 less 命令。

設置外殼和環境變量

在 Linux 中可用於設置環境變量的命令有:

set – 該命令設置或取消設置 shell 變量。 當不帶參數使用時,它將打印所有變量的列表,包括環境和 shell 變量,以及 shell 函數。
unset – 該命令刪除 shell 和環境變量。
export – 該命令設置環境變量。

為了更好地理解 shell 和環境變量之間的區別,我們將從設置 shell 變量開始,然後轉到環境變量。

我們將首先在當前會話中定義一個 shell 變量。 您可以使用 echo $MYVAR 驗證該變量是否已設置

使用 printenv 命令檢查此變量是否為環境變量:

不應返回任何輸出。 這意味著 MYVAR 變量不是環境變量。

export 命令用於設置環境變量。

要創建環境變量,只需將 shell 變量導出為環境變量:

您可以通過運行來檢查:

您還可以在一行中設置環境變量:

以這種方式創建的環境變量僅適用於當前會話。 如果您打開一個新的 shell,或者如果您註銷,所有變量都將丟失。

我們還可以將環境變量恢復為 shell 變量,甚至完全(取消設置)刪除它:

我們的 MYVAR 變量被定義為環境變量。 我們可以通過鍵入以下內容將其改回 shell 變量:

它不再是一個環境變量,但是,它仍然是一個 shell 變量。

如果我們想完全取消設置一個變量,無論是 shell 還是環境變量,我們可以使用 unset 命令來實現:

我們可以驗證它不再被設置:

由於未設置變量,因此不會返回任何內容。

持久環境變量

我們已經提到許多程序使用環境變量來決定如何操作的細節。 我們不想每次啟動新的 shell 會話時都必須設置重要的變量,
這 bash shell 根據會話的啟動方式讀取不同的配置文件。
交互式 shell 會話是附加到終端的 shell 會話。 非交互式 shell 會話是不附加到終端會話的會話。

不同會話之間的一個區別是 shell 是作為“登錄”會話還是“非登錄”會話生成的。

在大多數 Linux 發行版中,當您啟動新會話時,環境變量將從以下文件中讀取:

/etc/環境 – 使用此文件設置系統範圍的環境變量。

/etc/配置文件 – 每次加載此文件中設置的變量 bash 登錄外殼被輸入。

~/.bashrc – 每用戶外殼特定的配置文件。 為了 example,如果您使用 Bash,則可以在那裡聲明變量。

要將新的環境變量加載到當前的 shell 會話中,請使用 source 命令:

如果您需要設置系統範圍的變量,您可能需要考慮將它們添加到 /etc/配置文件, /等等/bash.bashrc, 或者 /etc/環境.

結論

在本教程中,我們學習瞭如何設置和列出環境和 shell 變量。 這些變量始終存在於您的 shell 會話中,並且對許多程序非常有用。 還有許多其他更平凡但更常見的場景,您需要閱讀或更改系統環境。 如果您有任何問題,請隨時在下面的評論中留言。