使用通配符在 Bash 配置文件中获取文件

使用通配符在 Bash 配置文件中获取文件

我一直在我的 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 内置命令,即不是与搜索路径中的可执行文件相对应的命令。因此,使用选项-execxargs将不起作用,因为这些构造仅识别可执行文件。但是,以下构造可以工作(感谢 steeldriver)。

while read -r f ; do source "$f" ;  done < <(find /home/myname/Projects -wholename '*/devel/setup.bash')

相关内容