~/.bashrc-Linux环境变量配置超详细教程

前言:

今天本来是想将代码调通的,但是一直受限于mujoco_py的渲染问题,前段时间发现两台Ubuntu18.04的机子可以offscreen渲染,另外三台Ubuntu16.04的机子无法offscreen渲染。
我以为我找到规律了,但是问题可能没有这么简单。
在解决这个问题的过程中,发现了mujoco_py的issues上有这样一个回复:
https://github.com/openai/mujoco-py/issues/408#issuecomment-735674851
提到这句话:

A non-working machine will typically include dependencies like:
/usr/lib/x86_64-linux-gnu/libGLEW.so (0x00007fa44cf82000)

离谱,我几乎所有的机子上都加了这个路径;
但是我的Ubuntu16的主机,加了太乱了,我也不知道那些句子使得路径生效,因此就百度搜索了好多~/.bashrc的环境变量配置问题,并没有找到合适的教程。
本篇博客将带着大家看懂下面的几句话的意思:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/us/.mujoco/mujoco200/bin:/usr/lib/nvidia-460:${CUDA_HOME}/lib64
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so
export PATH="/home/us/Downloads/pycharm-2020.1/bin:$PATH"
export PATH="/home/us/Downloads/pycharm-2018.1/bin"
export CUDA_HOME=/usr/local/cuda-11.2

首先我们知道这个export是添加路径的意思,空格后面是环境变量名,有上面有四个不同的环境名,还有一个变量名被导入两次算是什么意思?
这个$PATHNAME是什么意思?为什么有不同的位置?
这个冒号:是什么意思?
这个大括号{}有什么作用?
如何验证我们的路径是否导入正确?
花里胡哨的操作,很难直接百度到想要的答案,我没系统的看过Linux的基础书记,总之这篇文章就都列出来做个分享~

参考链接:

  1. 超详干货!Linux 环境变量配置全攻略
  2. Linux环境变量及配置相关命令
  3. 修改Ubuntu的环境变量$PATH
  4. 环境变量$PATH:

1.最简单的环境变量配置全流程,新手向:

1.利用vim进入~/.bashrc文档,摁住ctrl+g,直接跳到最后一行,摁一下i键,进入插入模式,现在可以编辑文档了。
2.跳到最后一个字符,摁一下换行,可以在下一行输入命令。
3.一般来说在Ubuntu的终端中,ctrl+shift+c是复制,Ctrl+shift+v是粘贴;
4.我们输入第一个环境变量配置:

export DEMOPATH="/xxx/xxx/xx1x/"

5.路径添加好了,该关闭~/.bashrc了,摁一下esc键,退出插入模式;
6.输入冒号:wq,关闭bashrc;
7.这时候还没有生效!需要source一下,source命令的含义的博客

source ~/.bashrc

8.刚才配置的环境终于在这个终端生效了!,我们验证一下该环境变量到底有没有我们加的东西,我们有两种方法:

1.1 Linux读取环境变量的两种方法

读取环境变量的方法:

  • export命令显示当前系统定义的所有环境变量
  • echo $PATH命令输出当前的PATH环境变量的值
  • $PATH直接调取当前PATH的值。
    使用中间的这个,终端输入:
echo $DEMOPATH

显示结果:

/xxx/xxx/xx1x/

我们使用后者,在终端输入:

$DEMOPATH

显示了:

bash: /xxx/xxx/xx1x/: No such file or directory

虽然我们的这个路径没有显示的文件夹,但是变量名和路径是整上去了。
现在我们开整第二个功能:

2.为同一个环境变量添加多个路径

我们在python中经常会遇到一个环境变量,需要加多个路径,但如何添加多个路径呢?
直观上用个分号;行不行?不行!
我们需要用冒号:来分开!离谱!
好的我们现在在~/.bashrc中再加一句路径,变成了下面的样子:

export DEMOPATH="/xxx/xxx/xx1x/"
export DEMOPATH="/xxx/xxx/xx2x/"

生效后,我们检验一下效果:

bash: /xxx/xxx/xx2x/: No such file or directory

嗯?我的路径1 呢?
原来是被覆盖掉了!
下面我展示几种同一个环境变量添加多个路径的方法:

2.1一行式冒号:添加多个路径

上面我们知道,划分多个路径,通过冒号。
那么我们将同一个环境变量的路径,写到一行,路径之间用冒号隔开:

export DEMOPATH="/xxx/xxx/xx1x/":"/xxx/xxx/xx2x/"

显示效果如下:

bash: /xxx/xxx/xx1x/:/xxx/xxx/xx2x/: No such file or directory

终于成功了!
但是这个不优雅,一句话写太长了,中间错了都不知道错哪儿了。
因此我们需要一个增量式的路径添加:

2.2$PATHNAME实现增量式添加

上面我们用了好几次这个美元符 , 这 个 符 号 是 什 么 意 思 呢 ? 直 观 的 理 解 就 是 , 直 接 调 取 当 前 环 境 变 量 的 值 。 因 此 我 们 可 以 用 这 个 ,这个符号是什么意思呢? 直观的理解就是,直接调取当前环境变量的值。 因此我们可以用这个 PATH,来代替原本环境变量的路径,要是加东西的话,在前面或者后面加一个分号就行了~

2.2.1利用$PATH在后面!增加!新的路径
export DEMOPATH="/xxx/xxx/xx1x/"
export DEMOPATH="$DEMOPATH:/xxx/xxx/xx2x/"

打印结果如下:

/xxx/xxx/xx1x/:/xxx/xxx/xx2x/

确实在后面,效果是先调用之前的1,再在后面加上2;

2.2.2利用$PATH在前面!增加!新的路径
export DEMOPATH="/xxx/xxx/xx1x/"
export DEMOPATH="/xxx/xxx/xx2x/:$DEMOPATH"

打印结果如下:

/xxx/xxx/xx2x/:/xxx/xxx/xx1x/

效果就不用描述了~

3.大括号,单引号,双引号的作用:

  • 大括号{}用在变量名的身上,用处目前没看出来有没有明显的区别;
  • 路径可以直接写,也可以加双引号,但是一定不能加单引号!

不加引号的效果:

输入:

export DEMOPATH=/xxx/xxx/xx1x/
export DEMOPATH=/xxx/xxx/xx2x/:$DEMOPATH

输出

$ echo $DEMOPATH
/xxx/xxx/xx2x/:/xxx/xxx/xx1x/

双引号的效果:

输入:

export DEMOPATH="/xxx/xxx/xx1x/"
export DEMOPATH="/xxx/xxx/xx2x/:$DEMOPATH"

输出

/xxx/xxx/xx2x/:/xxx/xxx/xx1x/

加不加我没看出来,如果有什么隐含的区别,请大家告知!

单引号的效果:

输入:

export DEMOPATH='/xxx/xxx/xx1x/'
export DEMOPATH='/xxx/xxx/xx2x/:$DEMOPATH'

输出:

/xxx/xxx/xx2x/:$DEMOPATH

这时候就没有转义成功!

总结:

这个路径导入涉及到的点都是我之前没有接触过的。
很多玩意儿连关键词都搜不准确。
但又几乎是每天都用,因此做一个总结分享。

联系方式:

ps: 欢迎做强化的同学加群一起学习:

深度强化学习-DRL:799378128

欢迎关注知乎帐号:未入门的炼丹学徒

CSDN帐号:https://blog.csdn.net/hehedadaq

极简spinup+HER+PER代码实现:https://github.com/kaixindelele/DRLib

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐