项目场景

        ??????????当你新建一个ROS功能包后,打开终端运行这个功能包,rosrun/roslaunch命令终端显示找不到文件/过程无法自动补全???????


问题基础

1. bashrc文件作用理解(位于根目录下  ~/.bashrc

转载:Linux 的.bashrc 文件详解_冠切云之崔嵬的博客-CSDN博客_linux bashrc

linux下的exportsource命令_awhuter博客-CSDN博客_export命令1、source命令source ~/…/../filesource命令作用sourcebash 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.nonetaskblog-2~all~top_click~default-1-120286745-nullnull.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.4187source命令和export命令的作用理解

重点:

        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文件的过程可以参考

以下为详细截图

 上述图片转载自:问题解决—–解决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.nonetaskblog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-105046317-nullnull.142%5Ev63%5Econtrol,201%5Ev3%5Econtrol_2,213%5Ev2%5Et3_esquery_v1&utm_term=devel%2Fsetup.bash&spm=1018.2226.3001.4187

问题为什么在~/.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` 命令应该按照它们的依赖顺序添加,以确保它们都能够正确地生效。

原文地址:https://blog.csdn.net/m0_57622625/article/details/127848990

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34682.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注