linux设置环境变量
我今日就要带佢走,我睇下边个够胆拦我。 ——伍六七 《刺客伍六七》
本文介绍Linux/Unix操作系统下,如何设置变量,以及如何将变量升级为环境变量。
操作变量的命令
查询变量值
echo $PATH ;
echo ${PATH};
设置变量值
foo=bianliang;
等号两边不能有空格,比如下面这样会报错:
foo = bianliang;
foo=bian liang;
如果变量值中有空格,用单引号或双引号括起来
foo = 'bian liang';
取消变量
unset foo;
$()命令替换
用$()或``包裹命令常用于命令替换
foo=$(uname);
echo $foo; #输出uname命令的返回值,在我的mac上是Darwin
环境变量
普通变量的作用域只局限于当前程序。
通过export命令,可以将普通变量升级为环境变量,环境变量就可以作用于整个操作系统内啦。
export foo;
foo=klhans;
zsh; #进入子程序,我用的是zshell,如果是bash shell的话命令改为bash;
echo $foo; #输出为空,子程序中没有这个变量
exit; #回到父程序
export foo; #设置为环境变量
zsh;
echo $foo; #输出klhans,设置环境变量成功!
也可以在声明变量的同时,升级为环境变量
export foo=hans;
env/export查看环境变量
env;
export;
在我的mac上部分输出如下:
$PATH变量
我们在命令行下运行某个命令的时候,这个命令往往不在当前目录下,那os怎么知道去哪找这个命令呢,总不能搜索所有目录吧。
$PATH变量就是用于保存搜索目录的变量,如果输入的命令不在当前目录下,那么os就会读取$PATH变量对应的目录,依次从目录中寻找命令,如果$PATH变量对应的目录中也没有找到命令,那就说明真的没有这个命令啦
我们可以将常用的命令保存在$PATH变量中,这样就不需要进入特定的目录啦,但是注意不要覆盖系统原有的变量,否则一些系统命令就执行不了啦,比如cd
命令😅。
所以我们一般选择在原有的$PATH上追加上我们的新环境变量,命令如下
追加/添加变量
PATH=${PATH}:/home/bin;
PATH=${PATH}:${JAVA_HOME}/bin;
环境变量配置文件
不写入文件的变量或环境变量在注销shell之后就会失效,如果想要变量一直保留,就要写入配置文件
配置文件读取流程
shell根据用户是否登录区分为login shell和 non-login shell,这两种shell读取的配置文件是不同的,所以我们分开来说,先说login shell
login shell
login shell会读取两种配置文件:
- 系统配置文件
- 用户配置文件
/etc/profile是系统的变量配置文件,被所有用户共享。
读取完/etc/profile之后,会去读取用户私有的配置文件,在bash shell中用户私有的配置文件主要有三个,优先级高的配置文件读取到之后,就不会再读取优先级低的配置了,也就是说,用户私有的配置文件只会有一个生效!优先级从高到低是:
-
~/.bash_profile
-
~/.bash_login
-
~/.profile
另外~/.bash_profile中os预写了逻辑,会去主动读取~/.bashrc中的变量,所以~/.bashrc中的变量也会生效,总流程图如下:
non-login shell
non-login shell 只会读取~/.bashrc一个配置文件
source或.使配置文件立即生效
由于变量配置文件只会在shell启动的时候读取一次,所以如果不想退出当前shell的话,要用source或.命令主动读取配置文件并生效。
source ~/.bash_profile;
. ~/.bash_profile;
参考
《鳥哥的 Linux 私房菜》