源脚本中的.bashrc无法正常工作

时间:2017-04-27 13:19:45

标签: bash command-line

我正在安装一个安装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 ""

正如在评论中所写,采购.bashrc而不是直接setup.bash不起作用。我真的不明白为什么。你能解释一下吗?

1 个答案:

答案 0 :(得分:11)

某些平台附带~/.bashrc,如果发现shell 非交互式,则在顶部有条件明确停止处理。 < / p>

如果是这种情况,脚本中获取~/.bashrc将无效,因为脚本在非交互式中运行>默认情况下的shell。

您的选项是:

  • 要么:停用~/.bashrc中的条件

  • 或者:在调用source ~/.bashrc之前尝试模拟交互式shell
    所需的具体模拟取决于条件的具体情况,但有两种可能的方法;你可能不得不雇用他们两者如果你没有提前知道你会遇到哪些条件:

    • set -i暂时使$-包含i,表示交互式shell。
    • 确保环境变量PS1具有值。

或者,如果您控制自己的脚本的调用方式,则可以使用bash -i script调用它。