讀取和設定 Ubuntu 環境變數(很全面)

KKKKevin發表於2024-11-18

讀取和設定 Ubuntu 環境變數(很全面)

環境變數

在 Ubuntu 中,環境變數是一些動態命名值,用於影響程式的執行方式。它們包含了系統或使用者的配置資訊,幫助程式在執行時獲取必要的環境資訊。 環境變數通常儲存在記憶體中,程式可以透過這些變數訪問到相關的資料。

常用的環境變數👇

  1. PATH: 包含可執行檔案的搜尋路徑,當你在終端輸入命令時,系統會在這些路徑中查詢相應的可執行檔案。

  2. HOME: 指向當前使用者的主目錄,通常用於存放使用者的個人檔案和配置。

  3. USER: 當前登入使用者的使用者名稱。

  4. SHELL: 當前使用者的預設命令列直譯器(如 Bash)。

  5. LANG: 系統語言設定,影響程式的語言輸出。

檢視環境變數

set

列印出所有的 shell 變數和環境變數,包括函式。內容全面但較為簡單,不建議使用這個。

$ set
BASH=/usr/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="11")
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="1" [2]="16" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='5.1.16(1)-release'
COLORTERM=truecolor
COLUMNS=80
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DESKTOP_SESSION=ubuntu
DIRSTACK=()
DISPLAY=:0
EUID=1000
GDMSESSION=ubuntu
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_SETUP_DISPLAY=:1
GNOME_SHELL_SESSION_MODE=ubuntu
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/db18d791_d25c_4b3c_ae6a_0f93e5453044
GNOME_TERMINAL_SERVICE=:1.127
GROUPS=()
GTK_MODULES=gail:atk-bridge
HISTCONTROL=ignoreboth
# 後面還有很多

echo

列印出特定的環境變數

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin

declare

列出當前 shell 中的所有變數(包括環境變數、區域性變數和函式),以一種更結構化的方式顯示他們的型別和內容。

$ declare -p
declare -- BASH="/usr/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -i BASHPID
declare -A BASH_ALIASES=()
declare -a BASH_ARGC=([0]="0")
declare -a BASH_ARGV=()
declare -- BASH_ARGV0
declare -A BASH_CMDS=()
declare -- BASH_COMMAND
declare -a BASH_COMPLETION_VERSINFO=([0]="2" [1]="11")
declare -a BASH_LINENO=()
declare -a BASH_SOURCE=()
declare -- BASH_SUBSHELL
declare -ar BASH_VERSINFO=([0]="5" [1]="1" [2]="16" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
declare -- BASH_VERSION="5.1.16(1)-release"
declare -x COLORTERM="truecolor"
declare -- COLUMNS="417"
declare -- COMP_WORDBREAKS
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DESKTOP_SESSION="ubuntu"
declare -a DIRSTACK=()
declare -x DISPLAY=":0"
declare -- EPOCHREALTIME
# 後面還有很多

顯示的格式 declare -x VAR= "value"(環境變數),declare VAR= "value"(區域性變數)。並且帶有符號:

  1. -i 將變數宣告為整數型別
  2. -A 將變數宣告為 hash table
declare -A my_array
my_array["key"]="value"
echo "${my_array["key"]}"  # 輸出 "value"
  1. -a 將變數宣告為普通陣列
declare -a my_array=(1 2 3)
echo "${my_array[1]}"  # 輸出 "2"
  1. -x 將變數匯出為環境變數,使其在子程序中可用
declare -x MY_VAR="Hello"

printenv

檢視指定的環境變數

printenv HOME

在檔案系統檢視程序的環境變數 /proc

cat /proc/<PID>/environ

設定環境變數

終端使用 export 設定環境變數

這種方式僅在當前會話中有效:

$ export MY_VAR= "some_value"

配置檔案新增環境變數

  1. ~/.bashrc:開啟一個終端視窗時載入的環境變數檔案
  2. ~/.profile:在使用者登陸時載入
  3. ~/.bash_profile:登入 shell 的配置檔案

向檔案中新增環境變數的方式:

$ echo 'export MY_VAR= "some_value"' >> ~/.bashrc

使用命令使得更改生效:

$ source ~/.bashrc

透過指令碼設定環境變數

透過指令碼設定的環境變數將在指令碼執行期間有效

#!/bin/bash
export MY_VAR="some_value"

在執行某個指令時設定臨時環境變數

$ MY_VAR="some_value" command_to_run

相關文章