Linux shell 环境变量 All In One

xgqfrms / 2023-09-08 / 原文

Linux shell 环境变量 All In One

  1. 全局环境变量,system wide environment 系统级环境变量
  2. 局部环境变量,local wide environment 用户自定义环境变量

shell 的 3 种启动方式

  1. 登录默认的交互式 shell
  2. 非登录交互式 shell
  3. 运行脚本非交互式 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

设置系统环境变量的方式

  1. 通过 shell 命令行 (临时性的环境变量,退出 shell 命令行,会自动销毁 )
  2. 通过 shell script 脚本文件 (临时性的环境变量,退出 shell 命令行,会自动销毁 )
  3. 通过 shell 启动配置文件,如 /etc/profile (持久化 的环境变量,每次启动 shell 都会通过加载启动配置文件自动重新创建 )

父 shell 设置的系统环境变量,子 shell 可以访问该系统环境变量;
⚠️ 但是子 shell如果修改删除该系统环境变量只会对子 shell 自己有效,不会影响到父 shell,即不会向上传播变化。

# 设置系统环境变量, 全大写字母
# key=value 等号两边不可以有空格⚠️
$ export GITHUB_ENV_USERNAME=xgqfrms

$ echo $GITHUB_ENV_USERNAME

__CFBundleIdentifier=com.apple.Terminal
TMPDIR=/var/folders/by/24_sdryj5sv4qvxcyjfnn64c0000gn/T/
XPC_FLAGS=0x0
TERM=xterm-256color
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/mongodb-community@4.2/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/mongodb-community@4.2/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/
SHLVL=2
PWD=/Users/xgqfrms-mm
OLDPWD=/Users/xgqfrms-mm
ZSH=/Users/xgqfrms-mm/.oh-my-zsh
PAGER=less
LESS=-R
NVM_DIR=/Users/xgqfrms-mm/.nvm
NVM_CD_FLAGS=-q
NVM_BIN=/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin
GITHUB_ENV_USERNAME=xgqfrms
LC_CTYPE=UTF-8
_=/usr/bin/env

image

局部环境变量

⚠️ 没有单独查看当前局部环境变量的命令
set 查看所有环境变量,会对变量按照字母大小和字母顺序进行排序

# 查看当前用户拥有的所有环境变量 (局部环境变量 + 系统环境变量)
$ set

set
'!'=0
'#'=0
'$'=1664
'*'=(  )
0=zsh
'?'=0
@=(  )
ARGC=0
BG
CDPATH=''
COLUMNS=90
CPUTYPE=x86_64
EGID=20
EUID=501
FG
FIGNORE=''
FPATH=/Users/xgqfrms-mm/.oh-my-zsh/plugins/git:/Users/xgqfrms-mm/.oh-my-zsh/functions:/Users/xgqfrms-mm/.oh-my-zsh/completions:/usr/local/share/zsh/site-functions:/usr/share/zsh/site-functions:/usr/share/zsh/5.9/functions
FUNCNEST=700
FX
GID=20
GITHUB_ENV_USERNAME=xgqfrms
HISTCHARS='!^#'
HISTCMD=6710
HISTFILE=/Users/xgqfrms-mm/.zsh_history
HISTSIZE=50000
HOME=/Users/xgqfrms-mm
HOST=xgqfrms-mm.local
IFS=$' \t\n\C-@'
KEYBOARD_HACK=''
KEYTIMEOUT=40
LC_CTYPE=UTF-8
LESS=-R
LINENO=10
LINES=69
LISTMAX=100
LOGNAME=xgqfrms-mm
MACHTYPE=x86_64
MAILCHECK=60
MAILPATH=''
MANPATH=''
MATCH=m
MBEGIN=1
MEND=1
MODULE_PATH=/usr/lib/zsh/5.9
NULLCMD=cat
NVM_BIN=/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin
NVM_CD_FLAGS=-q
NVM_DIR=/Users/xgqfrms-mm/.nvm
OLDPWD=/Users/xgqfrms-mm
OPTARG=''
OPTIND=1
OSTYPE=darwin22.0
PAGER=less
PATH=/bin:/usr/bin:/usr/local/bin:/Users/xgqfrms-mm/.nvm/versions/node/v18.12.0/bin:/usr/local/opt/mongodb-community@4.2/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/mongodb-community@4.2/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/
PPID=73157
PROMPT=$'%(?:%{\C-[[01;32m%}➜ :%{\C-[[01;31m%}➜ ) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
PROMPT2='%_> '
PROMPT3='?# '
PROMPT4='+%N:%i> '
PS1=$'%(?:%{\C-[[01;32m%}➜ :%{\C-[[01;31m%}➜ ) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
PS2='%_> '
PS3='?# '
PS4='+%N:%i> '
PSVAR=''
PWD=/Users/xgqfrms-mm
RANDOM=11289
READNULLCMD=more
SAVEHIST=10000
SCREEN_NO=''
SECONDS=1120
SECURITYSESSIONID=186a6
SHELL=/bin/zsh
SHELL_SESSION_DID_HISTORY_CHECK=1
SHELL_SESSION_DID_INIT=1
SHELL_SESSION_DIR=/Users/xgqfrms-mm/.zsh_sessions

# 设置局部环境变量, 全小写字母
# key=value 等号两边不可以有空格⚠️

# var✅ 没有 $, 赋值、修改等操作时候
$ github_env_key=value
$ github_env_key="space in value"

# $var✅ 有 $, 读取使用时候
$ echo $github_env_key

父 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

image

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/mongodb-community@4.2/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/mongodb-community@4.2/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/

shell 启动配置文件

shell 的启动方式不同,加载启动配置文件就不同 (数量/顺序)

  1. /etc/profile
  2. $HOME/.bash_profile
  3. $HOME/.bashrc
  4. $HOME/.bash_login
  5. $HOME/.profile
$ cat /etc/profile
# System-wide .profile for sh(1)

# if...then...fi 条件控制语句
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

# != && 逻辑判断语句
if [ "${BASH-no}" != "no" ]; then
    [ -r /etc/bashrc ] && . /etc/bashrc
fi

refs



©xgqfrms 2012-2021

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!