我一直在我的 Ubuntu 20.04 机器上尝试 ROS,并且刚刚通过阅读文档创建了我的第一个工作区。
稍后我需要获取此目录中的安装文件,以便它可以覆盖已设置的 ROS bash 安装文件。我的问题是,由于我将在同一位置拥有多个这样的项目,我可以使用通配符从我的工作文件夹中获取 setup.bash 文件吗?
例如,在我的计算机上,我将所有 ROS 项目放在一个通用标准文件夹中,该文件夹如下:
/home/myname/Projects/ros-projects/workspace-1/
同样,如果我有另一个项目,它将是:
/home/myname/Projects/ros-projects/workspace-2/
现在,setup.bash 位于每个工作区下的名为 devel 的文件夹中。所以问题是,我可以在我的 .bash_profile 中执行以下操作吗?
source /home/myname/Projects/*/*/devel/setup.bash
这不可能直接实现吗?我可以编写一个 shell 脚本来执行此操作吗?有什么想法吗?
答案1
source
是一个内部 bash 命令,它只接受单个文件名作为参数。当您提供通配符时,只会处理第一个匹配的文件。
要处理多个文件,您可以使用find
命令。source
但是,这是 shell 内置命令,即不是与搜索路径中的可执行文件相对应的命令。因此,使用选项-exec
或xargs
将不起作用,因为这些构造仅识别可执行文件。但是,以下构造可以工作(感谢 steeldriver)。
while read -r f ; do source "$f" ; done < <(find /home/myname/Projects -wholename '*/devel/setup.bash')