项目场景:
??????????当你新建一个ROS功能包后,打开终端运行这个功能包,rosrun/roslaunch等命令,终端显示找不到文件/过程无法自动补全???????
问题基础
1. bashrc文件作用理解(位于根目录下 ~/.bashrc)
转载:Linux 的.bashrc 文件详解_冠切云之崔嵬的博客-CSDN博客_linux bashrc
重点:
bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令,一定程度上支持命令定制。(因此它有相关的书写格式和命令,看看上面的链接2)
bashrc文件在每次启动终端时都会加载文件内的内容,里面存储并且每次打开终端都会加载一次bashrc文件内你的终端配置和环境变量。
(如果该终端有改动bashrc文件,就可通过一下命令重新载入环境变量等!!!!!)
source ~/.bashrc
2. ROS的基础设置
在安装ROS过程中,就需要我们在bashrc文件内写入
source /opt/ROS......(具体命令忘了)
这样在打开终端运行一些ros的相关命令,如:roscore等命令时,就可以自动补全,因为ROS相关的程序执行文件已经被检索到了。
原因分析:
假设我们现在创建了一个ROS功能包,名字叫 test !
根据上面对bashrc文件及ROS安装一些步骤理解,终端内无法找到我们新建的功能包,说明功能包没有加载进环境变量中,那么我们就可以通过编译完成的功能包下 test/devel/setup.bash文件把功能包加载进环境变量。
即:(在你编译成功后的功能包内)
source devel/setup.bash
但这只会在当前的终端内生效,只能在当前的终端内检索到,新建一个终端就没有啦!
解决方案:
对于常用的ros功能包,不可能每次都去敲这个命令吧?
因此就可以将上面这个命令直接写入 ~/.bashrc下的这个文件中,使其每次打开终端后都会自动载入bahsrc文件的内容,自然就可以做到每次打开bashrc文件都能自动识别到你的ROS功能包在哪儿啦!
更加详细写入bashrc文件的过程可以参考:
以下为详细截图:
新问题:为什么在~/.bashrc文件中,添加了source命令还是不能检索到,还是不能添加到环境变量中?
原因:source是有顺序要求的!!!
如果在 `~/.bashrc` 文件中存在其他 `source` 命令,那么这些命令可能会定义一些环境变量或别名,或者执行其他必要的初始化操作。如果你在这些 `source` 命令之前添加了新的 `source` 命令,那么在新的 `source` 命令执行之前,这些环境变量、别名或初始化操作可能还没有生效。
例如,假设你的 `~/.bashrc` 文件包含以下两个 `source` 命令:
```bash
source /opt/ros/melodic/setup.bash
source /path/to/some/other/file
```
如果你在这两个命令之间添加了一个新的 `source` 命令:
```bash
source /path/to/my/file
```
那么在新的 `source` 命令执行之前,ROS环境变量可能还没有设置,别名可能还没有定义,或者其他必要的初始化操作可能还没有完成。这可能会导致ROS功能包无法正确地启动或运行。因此,为了确保所有的ROS功能包都能正确地运行,你应该将新的 `source` 命令添加到其他 `source` 命令的下面,以确保它们都能够正确地生效。
例如,你应该将新的 `source` 命令添加到其他 `source` 命令的下面,以确保所有ROS功能包都能够正确地访问ROS环境变量:
```bash
source /opt/ros/melodic/setup.bash
source /path/to/some/other/file
source /path/to/my/file
```
这样,所有必要的ROS环境变量和其他初始化操作都可以在新的 `source` 命令执行之前完成,从而确保所有的ROS功能包都能够正确地运行。
请注意,如果你在 `~/.bashrc` 文件中有多个 `source` 命令,你应该按照正确的顺序添加它们,以确保所有必要的初始化操作都可以正确地完成。通常情况下,ROS功能包的 `setup.bash` 或 `setup.zsh` 文件应该是第一个被source的文件,因为它们定义了必要的ROS环境变量和其他初始化操作。其他 `source` 命令应该按照它们的依赖性顺序添加,以确保它们都能够正确地生效。