讀取和設定 Ubuntu 環境變數(很全面)
環境變數
在 Ubuntu 中,環境變數是一些動態命名值,用於影響程式的執行方式。它們包含了系統或使用者的配置資訊,幫助程式在執行時獲取必要的環境資訊。 環境變數通常儲存在記憶體中,程式可以透過這些變數訪問到相關的資料。
常用的環境變數👇
-
PATH: 包含可執行檔案的搜尋路徑,當你在終端輸入命令時,系統會在這些路徑中查詢相應的可執行檔案。
-
HOME: 指向當前使用者的主目錄,通常用於存放使用者的個人檔案和配置。
-
USER: 當前登入使用者的使用者名稱。
-
SHELL: 當前使用者的預設命令列直譯器(如 Bash)。
-
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"
(區域性變數)。並且帶有符號:
-i
將變數宣告為整數型別-A
將變數宣告為hash table
declare -A my_array
my_array["key"]="value"
echo "${my_array["key"]}" # 輸出 "value"
-a
將變數宣告為普通陣列
declare -a my_array=(1 2 3)
echo "${my_array[1]}" # 輸出 "2"
-x
將變數匯出為環境變數,使其在子程序中可用
declare -x MY_VAR="Hello"
printenv
檢視指定的環境變數
printenv HOME
在檔案系統檢視程序的環境變數 /proc
cat /proc/<PID>/environ
設定環境變數
終端使用 export
設定環境變數
這種方式僅在當前會話中有效:
$ export MY_VAR= "some_value"
配置檔案新增環境變數
~/.bashrc
:開啟一個終端視窗時載入的環境變數檔案~/.profile
:在使用者登陸時載入~/.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