Linux shell 环境变量 All In One
- 全局环境变量,system wide environment 系统级环境变量
- 局部环境变量,local wide environment 用户自定义环境变量
shell 的 3 种启动方式
登录
默认的交互式 shell
非登录
的交互式 shell
- 运行
脚本
的非交互式 shell
shell 的常见类型
- sh
bash
- csh
zsh
# 查看 shell 路径
$ which sh
/bin/sh
$ which bash
/bin/bash
$ which csh
/bin/csh
$ which zsh
/bin/zsh
全局环境变量
# 查看全局环境变量
$ env
# OR
$ printenv
# 查看全局环境变量
$ env
# OR
$ printenv
__CFBundleIdentifier=com.apple.Terminal
TMPDIR=/var/folders/by/24_sdryj5sv4qvxcyjfnn64c0000gn/T/
XPC_FLAGS=0x0
TERM=xterm-256color
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.NNA6aLv9vF/Listeners
SECURITYSESSIONID=186a6
XPC_SERVICE_NAME=0
TERM_PROGRAM=Apple_Terminal
TERM_PROGRAM_VERSION=447
SHELL=/bin/zsh
HOME=/Users/xgqfrms-mm
LOGNAME=xgqfrms-mm
USER=xgqfrms-mm
PATH=/bin:/usr/bin:/usr/local/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/usr/local/opt/[email protected]/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/bin:/usr/bin:/usr/local/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/Library/Frameworks/Python.framework/Versions/3.11/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/usr/local/mysql/bin/
SHLVL=1
PWD=/Users/xgqfrms-mm
OLDPWD=/Users/xgqfrms-mm
ZSH=/Users/xgqfrms-mm/.oh-my-zsh
PAGER=less
LESS=-R
LSCOLORS=Gxfxcxdxbxegedabagacad
NVM_DIR=/Users/xgqfrms-mm/.nvm
NVM_CD_FLAGS=-q
NVM_BIN=/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin
LC_CTYPE=UTF-8
_=/usr/bin/env
设置系统环境变量的方式
- 通过命令行
- 通过 shell script 脚本文件
- 通过 shell 启动配置文件,如
/etc/profile
# 设置系统环境变量, 全大写字母
# key=value 等号两边不可以有空格⚠️
$ export GITHUB_ENV_USERNAME=xgqfrms
$ echo $GITHUB_ENV_USERNAME
父 shell
设置的系统环境变量,子 shell
可以访问该系统环境变量;
⚠️ 但是子 shell
如果修改
和删除
该系统环境变量只会对子 shell 自己有效,不会影响到父 shell,即不会向上传播变化。
局部环境变量
# 查看当前用户拥有的所有环境变量 (局部环境变量 + 系统环境变量)
$ set
# ⚠️ 没有单独查看当前局部环境变量的命令
# 查看当前用户拥有的所有环境变量 (局部环境变量 + 系统环境变量)
$ set
# ⚠️ 没有单独查看当前局部环境变量的命令
# 设置局部环境变量, 全小写字母
# key=value 等号两边不可以有空格⚠️
$ github_env_username=xgqfrms
$ echo $github_env_username
父 shell 设置的局部环境变量,子 shell
不可以
访问该局部环境变量
# 父 shell
$ github_env_username=xgqfrms
$ echo $github_env_username
xgqfrms
$ set | grep github_env_username
github_env_username=xgqfrms
# 子 shell
$ bash
$ echo $github_env_username
demos
系统环境变量
$ echo $HOME
/Users/xgqfrms-mm
$ echo $PATH
/bin:/usr/bin:/usr/local/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/usr/local/opt/[email protected]/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/bin:/usr/bin:/usr/local/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/bin:/usr/bin:/usr/local/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/usr/local/opt/[email protected]/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/bin:/usr/bin:/usr/local/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/Library/Frameworks/Python.framework/Versions/3.11/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/usr/local/mysql/bin/:/usr/local/mysql/bin/