linux 系統中如何修改環境變量

shell 的週期

  • 用戶登入到 linux 系統後,系統將啟動一個用戶的 shell,在這個 shell 中,可以使用 shell 命令或聲明變量,也可以創建並運行 shell 腳本程序
  • 運行 shell 腳本時,如果使用 sh/bash 指令,系統將創建一個子 shell。此時,系統中將有兩個 shell,一個是登入時系統的 shell,另一個是系統為了運行腳本程序創建的 shell
  • 當一個腳本程序運行完畢,他的腳本將中止,可以返回到該腳本之前的 shell
  • 用戶可以有很多 shell,每個 shell 都是有某個 shell(稱為父 shell)派生

shell 並非一個個終端(terminal),在一個終端當中,可以開很多 shell

環境變量的週期

  • 在 shell 中執行時,會提供一組環境變量
  • 當子 shell 中定義的變量只在該子 shell 內有效,如果在一個 shell 腳本程序中定義了一個變量,當該腳本程序運行時,這定義只在該腳本程序內的一個局部變量,其他的 shell 不能引用它
  • 要使某個變量的值可以在其他 shell 中被改變,可以使用 export 命令對已定義的變量進行輸出。export 命令將使系統在創建每一新的 shell 時定義這個變量的一個拷貝。這個過程稱為變量輸出

shell 與環境變量

  • export 指令將自定義變量變成環境變量
  • 執行腳本時,會開啟一個子 shell 環境,將父 shell 的系統變量複製到子 shell,不會複製父 shell 的自定義變量
  • 子 shell 中定義的系統變量,不能在父 shell 中訪問

在 Ubuntu 中有如下幾個檔案可以設定環境變數

  1. /etc/profile: 在登入時,作業系統定製使用者環境時使用的第一個檔案,此檔案為系統的每個使用者設定環境資訊,當用戶第一次登入時,該檔案被執行
  2. /etc/environment: 在登入時,作業系統使用的第二個檔案,系統在讀取用戶的 profile 前,設定環境檔案的環境變數
  3. ~/.bash_profile: 在登入時用到的第三個檔案是 .profile 文件,每個用戶可使用該檔案輸入專用於自己使用的 shell 資訊,當用戶登入時,該檔案僅僅執行一次 預設情況下,他設定環境變量,執行使用者的 .bashrc 檔案 /etc/bashrc: 為每一個執行 bash shell 的使用者執行此檔案。當 bash shell 被開啟時,該檔案被讀取
  4. ~/.bashrc: 該檔案包含專用於你的 bash shell 的 bash 信息,當登入時以及每次開啟新的 shell 時,該該檔案被讀取

環境變量的優先順序

1 > 2 > 3

參考資料

export

  • 用於設置或顯示環境變量。
  • 在 shell 中執行程序時,shell 會提供一組環境變量。
  • export 可新增,修改或刪除環境變量,供後續執行的程序使用。
  • export 的效力僅及於該此登入操作。

語法

export 導出[-fnp] [變量名稱]=[變量設置值] TODO(del)

參數說明

  • -f 代表[變量名稱]中的函數名稱
  • -n 刪除指定的變量。變量實際上不會被刪除,只是後續的指令的執行環境不會輸出 TODO(del)
  • -p 列出所有的 shell 賦予程序的環境變量

範例

定義環境變量

export MYENV

定義環境變量並賦值

export MYENV=0

列出指定當前所有環境變量

export -p MYENV

輸出

export MYENV=0

列出當前所有環境變量

export -p

輸出

export MYENV=0
declare -x HOME=“/root“
declare -x LANG=“zh_CN.UTF-8“
declare -x LANGUAGE=“zh_CN:zh“
declare -x LESSCLOSE=“/usr/bin/lesspipe %s %s“
declare -x LESSOPEN=“| /usr/bin/lesspipe %s“

......

參考資料

https://www.runoob.com/linux/linux-comm-export.html

unset

刪除環境變量

語法

unset [變量名稱]

範例

刪除環境變量

export MYENV

最根本的設置:更改變量的配置文件

  • export 只能作用在當前 shell 與子 shell
  • 用戶登出或重新開機後,所有使用 export 設定的環境變量都會失效

修改 profile 文件

vi /etc/profile     # 為系統級設定
or
vi ~/.bash_profile  # 為用戶級設定

檔案中加入

export PATH="$PATH:$HOME/bin"

修改 .bashrc 文件

vi /etc/.bashrc     # 為系統級設定
or
vi ~/.bashrc        # 為用戶級設定

檔案中加入

export PATH="$PATH:$HOME/bin"

source

通過 echo 命令顯示用戶變量

echo $PATH

通過 env 命令顯示用戶變量

env | grep PATH

延伸閱讀

https://www.cntofu.com/book/46/linux_system/1517.md https://www.cnblogs.com/pcat/p/5467188.html http://linux.vbird.org/linux_basic/0320bash.php#fig10.4.1