你有没有过这种苦恼,每次运行 colcon build 之后,总是忘记 source install/setup.bash,导致运行节点的时候提示 package not found,从而又要重新输入一遍 source 命令。
解决办法很简单,将以下内容复制粘贴到 ~/.bashrc 文件中:
# ROS2 workspace build + auto source
cb() {
if [ ! -d "src" ]; then
echo "Error: Not in a ROS2 workspace root (src/ directory not found)"
return 1
fi
if colcon build "$@"; then
echo "✅ colcon build succeed"
if source install/setup.bash; then
echo "✅ successfully loaded install/setup.bash"
else
echo "⚠️ failed to load install/setup.bash"
fi
else
echo "❌ colcon build failed"
return 1
fi
}
如此一来,我们只需要在ROS2工作空间中用 cb 命令代替 colcon build,就可以自动在编译后source环境变量了:
cb # 编译整个工作空间并自动source
ros2 run ... # 然后直接运行ROS2程序即可,无需再source
且由于我们在配置语句中使用了 colcon build "$@",所以cb命令附带的参数也会传递给 colcon build:
cb --packages-select my_pkg # 编译指定包并自动source
cb --symlink-install # 带参数编译并自动source
下面是实际对比,左边是colcon build(编译完后不能马上运行程序),右边是cb(编译完后马上可以运行程序,无需source):

其实还可以再在 `~/.bashrc` 中加入一段:
# quickly source install/setup.bash
sos() {
# check if src directory exists
if [ ! -d "src" ]; then
echo "Error: No src/ directory found. Are you in a ROS2 workspace?"
return 1
fi
# source
if source install/setup.bash; then
echo "✅ successfully loaded install/setup.bash"
else
echo "⚠️ failed to load install/setup.bash"
fi
}
这样的话,在不需要重新编译项目的时候,也可以使用`sos`命令快捷source环境变量。
