项目场景:
??????????当你新建一个ROS功能包后,打开终端运行这个功能包,rosrun/roslaunch等命令,终端显示找不到文件/过程无法自动补全???????
问题基础
1. bashrc文件作用理解(位于根目录下 ~/.bashrc)
转载:Linux 的.bashrc 文件详解_冠切云之崔嵬的博客-CSDN博客_linux bashrc
linux下的export和source命令_awhuter的博客-CSDN博客_export命令1、source命令source ~/…/../filesource命令作用:source是bash shell的内置命令,在当前shell下读取并执行“file中的命令”通常用于重新执行刚修改完的初始化文档。如在linux中修改了./bashrc启动初始化文件,这时可以用source命令重新执行,使得修改生效而不用注销再次登录。与./直接执行脚本不同,直接执行是在子shell运行的,结果并没有反映到父shell中。source是直接在本shell中运行的,不会启动一个新的shell,所以脚https://blog.csdn.net/qq_41253960/article/details/120286745?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166865380516782390518360%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166865380516782390518360&biz_id=0&utm_medium=distribute.pc_search_result.none–task–blog-2~all~top_click~default-1-120286745-null–null.142%5Ev63%5Econtrol,201%5Ev3%5Econtrol_2,213%5Ev2%5Et3_esquery_v1&utm_term=source%E5%91%BD%E4%BB%A4&spm=1018.2226.3001.4187(source命令和export命令的作用和理解)
重点:
bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令,一定程度上支持命令定制。(因此它有相关的书写格式和命令,看看上面的链接2)
bashrc文件在每次启动终端时都会加载文件内的内容,里面存储并且每次打开终端都会加载一次bashrc文件内你的终端配置和环境变量。
(如果该终端有改动bashrc文件,就可通过一下命令重新载入环境变量等!!!!!)
source ~/.bashrc
2. ROS的基础设置
source /opt/ROS......(具体命令忘了)
这样在打开终端运行一些ros的相关命令,如:roscore等命令时,就可以自动补全,因为ROS相关的程序执行文件已经被检索到了。
原因分析:
根据上面对bashrc文件及ROS安装一些步骤理解,终端内无法找到我们新建的功能包,说明功能包没有加载进环境变量中,那么我们就可以通过编译完成的功能包下 test/devel/setup.bash文件把功能包加载进环境变量。
即:(在你编译成功后的功能包内)
source devel/setup.bash
解决方案:
因此就可以将上面这个命令直接写入 ~/.bashrc下的这个文件中,使其每次打开终端后都会自动载入bahsrc文件的内容,自然就可以做到每次打开bashrc文件都能自动识别到你的ROS功能包在哪儿啦!
以下为详细截图:
上述图片转载自:问题解决—–解决ROS程序注册(source devel/setup.bash)只在当前终端生效的问题_陈一月的编程岁月的博客-CSDN博客_ros如何实现自动注册在进行ROS的嵌入式编程的时候,每次程序编写完成,都需要进行编译,这是ROS嵌入式开发的必要步骤,但还有一步,比较繁琐,觉得可以省略,就是对程序的注册,一个编写的程序,在ROS环境下,只有通过注册才能对程序进行运行,这样就很繁琐那么、有没有办法可以让我们不去操作这一步呢?让每次打开终端,系统就对我们程序进行注册,本次博客,林君学长就带大家解决程序注册的问题一、问题描述1、新建终端,没有进行程…https://blog.csdn.net/qq_42451251/article/details/105046317?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166865398816782425117100%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166865398816782425117100&biz_id=0&utm_medium=distribute.pc_search_result.none–task–blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-105046317-null–null.142%5Ev63%5Econtrol,201%5Ev3%5Econtrol_2,213%5Ev2%5Et3_esquery_v1&utm_term=devel%2Fsetup.bash&spm=1018.2226.3001.4187
新问题:为什么在~/.bashrc文件中,添加了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` 命令应该按照它们的依赖性顺序添加,以确保它们都能够正确地生效。
原文地址:https://blog.csdn.net/m0_57622625/article/details/127848990
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_34682.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!