0. 引言
在安装完ros后,会执行如下命令:
source /opt/ros/noetic/setup.bash
在编译功能包时,通常会执行如下命令:
catkin_make 功能包名称
source ./devel/setup.bash
为了不在每次编译时都执行,通常将代码写入到主目录~/下的.bashrc里面:
source ~/workspace/devel/setup.bash
如果我们忘了这一操作,通常在执行roslaunch时,会找不到刚刚编译完成的功能包,这是现象,我们想追问,为什么会出现这样的现象?
1. 环境变量作用
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些变量。
- path就是一个环境变量,一般来说应用程序的执行需要带上路径才可以运行,而定义在环境变量path中的路径,系统会自动识别,因此只要对应的可执行文件名称即可。
换句话说就是,要执行某一可执行文件时,通常要切换到这个文件的目录下,然后才能执行,但是这通常很麻烦,因为要知道可执行文件的路径,在安装时如果将路径作为系统的环境变量,就会省去这个步骤,如在命令行内直接执行:
roscore
rviz
python
- 又比如,我在电脑上面安装了两个版本的python,分别是系统自带的3.8版本和anaconda版本的3.11版本,在命令行执行时,较新版本的python可输入:
python
,而3.8版本则需要输入:python3
才可以,此外,在安装anaconda时,我们还将环境变量path设置为:
PATH="/home/wangchaun/anaconda3/bin:$PATH"
由于设置了环境变量,我们可以直接用python
来调用3.11版本python,但是如果没有环境变量,那么输入python
就没有任何作用,只有使用python3
来使用系统自带的3.8版本python。
- 再比如,conda的环境变量:
PATH=$PATH:/usr/local/cuda/bin
是指定conda执行命令的路径,如果没有这个环境变量,在命令行输入conda
将不会有任何反应。
- 除了path,常见的环境变量还有:
LIBRARY_PATH : 链接库文件时候查找路径
LD_LIBRARY_PATH : 运行时查找共享库的路径
2.环境变量配置
2.1 系统级环境变量
/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。这个文件一般就是调用/etc/bash.bashrc文件。
/etc/bash.bashrc:系统级的bashrc文件,为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
/etc/environment: 在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。
2.2 用户级环境变量
~/.profile: 在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己 使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
~./bash_login:不推荐使用这个,这些不会影响图形界面。而且.bash_profile优先级比bash_login高。当它们存在时,登录shell启动时会读取它们。
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.