Linux环境变量
啥是环境变量?
环境变量就是能影响程序运行的动态值,在Linux里超级重要,管系统配置和程序执行。学会玩转它们,系统管理和开发就轻松多了!
先搞懂Shell变量
先从简单的shell变量入手,摸清Linux变量的门道。
打开终端,例如在
/home/labex/project
目录。:bashcd /home/labex/project
创建个shell变量,直接给名字赋值:
bashmy_var="Yo, Linux"
注意:赋值时等号(
=
)两边别加空格,不然会报错!想看值,用
echo
加$
:bashecho $my_var
应该蹦出:
Yo, Linux
还能把变量塞进其他命令:
bashecho "看看my_var:$my_var"
输出:
看看my_var:Yo, Linux
这就整了个shell变量。不过,它只在当前终端管用,新开终端就没了。环境变量这时候就派上用场。
理解环境变量
环境变量是能让子进程(比如脚本、程序)访问的变量,比shell变量牛。
瞅瞅当前所有环境变量:
bashenv
输出一堆变量,别慌,后面聊重点。
最硬核的环境变量是
PATH
,看看:bashecho $PATH
PATH
列出系统找程序的目录,冒号(:
)隔开,后续详解PATH
。整一个自己的环境变量,用
export
:bashexport MY_ENV_VAR="我是个环境变量"
export
让变量能被子进程用,这就是它跟shell变量的区别。看区别,写个脚本试试。用
cat
和heredoc
整脚本:bashcat << 'EOF' > test_vars.sh #!/bin/bash echo "Shell变量:$my_var" echo "环境变量:$MY_ENV_VAR" EOF
赋予脚本执行权限:
bashchmod +x test_vars.sh
运行脚本:
bash./test_vars.sh
你会看到
MY_ENV_VAR
能用,my_var
不行。因为my_var
没导出,子进程不认识。确认
MY_ENV_VAR
是环境变量:bashenv | grep MY_ENV_VAR
应该能看到你的变量。
直接查值:
bashecho $MY_ENV_VAR
用export
的变量能被子进程用,普通shell变量不行。
小知识:
- Shell变量只在当前终端管用。
- 环境变量(
export
出来的)能被子进程用。- 新终端不继承当前终端的变量,除非写进启动文件(比如
.zshrc
)。
后面教你咋让变量永久生效。
玩转PATH变量
PATH
指定系统找命令的目录,改它能让你在任何地方跑自定义脚本。
先看当前
PATH
:bashecho $PATH
像
/usr/local/bin:/usr/bin:/bin
这样。建个目录放脚本:
bashmkdir ~/my_scripts
~
是主目录,等于/home/labex
。切过去,写个脚本:
bashcd ~/my_scripts nano hello.sh
在
nano
里输入:bash#!/bin/bash echo "嗨,我的脚本!"
保存退出:
Ctrl+X
,Y
,Enter
。运行脚本:
bashchmod +x hello.sh
不加权限,运行会报“权限拒绝”。
把
my_scripts
加到PATH
:bashexport PATH="$PATH:$HOME/my_scripts"
现在随便哪儿都能跑脚本:
bashhello.sh
应该输出:
嗨,我的脚本!
试试换个目录跑:
bashcd /tmp hello.sh
照样能跑!这就是
PATH
的魔法,系统会在PATH
列的目录里找命令。
让变量永久生效
现在设置的变量,关终端就没了。想一直用,得加到shell配置文件。我们用的是Zsh(比Bash高级,macOS默认壳),所以改.zshrc
。用Bash的话得改.bashrc
,别搞错!
用
nano
打开.zshrc
:bashnano ~/.zshrc
~
是主目录,文件不存在会新建。每次开新终端,这文件都会跑。滚到文件底,加这几行:
bashexport MY_ENV_VAR="我是个环境变量" export PATH="$PATH:$HOME/my_scripts"
确认没拼错,等号左右没空格。
保存退出:
Ctrl+X
,Y
,Enter
。不关终端就生效,用
source
:bashsource ~/.zshrc
source
在当前终端跑配置文件,直接生效。不然得重开终端。
现在每次开终端,这些变量都自动设置。
认识几个重要环境变量
Linux有些内置环境变量,系统运行靠它们:
HOME
:当前用户主目录。bashecho $HOME
USER
:当前用户名。bashecho $USER
SHELL
:默认shell。bashecho $SHELL
PWD
:当前目录路径(Print Working Directory)。bashecho $PWD
TERM
:模拟的终端类型。bashecho $TERM
知道这些,能更好搞定Linux环境。
删除环境变量
想删环境变量?用unset
。
先看
MY_ENV_VAR
还在不:bashecho $MY_ENV_VAR
应该看到之前的值。
删掉它:
bashunset MY_ENV_VAR
确认删了:
bashecho $MY_ENV_VAR
没输出,说明没了。
保险点,用
-v
确保删变量不是函数:bashunset -v MY_ENV_VAR
效果一样。
注意:如果你添加变量到.zshrc
里,下次开终端或source .zshrc
,它会回来。
总结
简单总结一下:
- shell变量,要明白它们的作用域。
- 搞懂环境变量跟shell变量的区别,
export
是关键,能让子进程用。 - 改了
PATH
,让脚本随便哪儿都能跑,冒号:
分隔得记牢。 - 在
.zshrc
里永久设置变量,懂了Bash和Zsh区别,source
让变化秒生效。 - 重点学习Linux内置重要变量。
- 用
unset
删变量,干净利落。