读取和设置 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