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上部分输出如下:

image-20210306142421999

$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中用户私有的配置文件主要有三个,优先级高的配置文件读取到之后,就不会再读取优先级低的配置了,也就是说,用户私有的配置文件只会有一个生效!优先级从高到低是:

  1. ~/.bash_profile

  2. ~/.bash_login

  3. ~/.profile

另外~/.bash_profile中os预写了逻辑,会去主动读取~/.bashrc中的变量,所以~/.bashrc中的变量也会生效,总流程图如下:

non-login shell

non-login shell 只会读取~/.bashrc一个配置文件

source或.使配置文件立即生效

由于变量配置文件只会在shell启动的时候读取一次,所以如果不想退出当前shell的话,要用source或.命令主动读取配置文件并生效。

source ~/.bash_profile;
. ~/.bash_profile;

参考

《鳥哥的 Linux 私房菜》

posted @ 2021-06-19 11:46  孔令翰  阅读(523)  评论(0编辑  收藏  举报