【发布时间】:2017-04-27 13:19:44
【问题描述】:
我正在编写一个正在安装 ros 的脚本,并在安装后使用 catkin_make 编译工作区。
我找到了解决问题的方法,但我无法解释原因。我有一个名为 install.bash 的文件正在调用其他文件:
#!/bin/bash
source 01_install_ros.bash
重要的是01_install_ros.bash:
# variable not set because it is done in the script setup.bash of ros
echo "before source in 01_install_ros"
echo "ROS_ROOT: "$ROS_ROOT
whereis catkin_make
echo ""
echo "source /opt/ros/kinetic/setup.bash" >> $HOME/.bashrc
# doesn't set the variables
source "$HOME"/.bashrc
# the solutions
source /opt/ros/kinetic/setup.bash
# variables not set if I use the source of .bashrc
echo "after source in 01_install_ros"
echo "ROS_ROOT: "$ROS_ROOT
whereis catkin_make
echo ""
正如在 cmets 中所写的那样,采购 .bashrc 而不是直接 setup.bash 是行不通的。我真的不明白为什么。你能解释一下吗?
【问题讨论】:
-
.bashrc旨在由 Bash 本身读取。为什么您认为可能有必要在脚本中执行此操作? -
因为我在
01_install_ros.bash的末尾添加了一行,即从 ros 采购 setup.bash。我需要采购它。 -
因为我添加了行
source /opt/ros/kinetic/setup.bash" at the end of.bashrc. I do that in01_install_ros.bash`。我需要获取这个 setup.bash 才能访问 $PATH 中的 catkin_make。我不明白为什么我在采购 .bashrc 时没有这种访问权限。我希望清楚。 -
使用
exec bash启动一个新的Bash,它已经读取了更新的.bashrc。 -
我认为你不明白。我不寻找解决方案。我想要一个解释。为什么它不适用于
source ~/.bashrc?我知道怎么解决:直接source /opt/ros/kinetic/setup.bash。
标签: bash command-line