我想使用ros
、conda
或pyenv
其他需要您在使用之前提供某种初始化代码的程序。但将它们的所有初始化代码添加到 中.bashrc
似乎充其量是繁琐的,最坏的情况是不切实际的(conda
具体来说需要几秒钟才能初始化)。
最好的情况是,我会有如下功能:
ros2 () {
# Info
echo "First ros2 call, sourcing necessary files..."
# Source ros2 environment
source /opt/ros/eloquent/setup.bash
# Remove this function
unset -f ros2
# Run was originally intended
/opt/ros/eloquent/bin/ros2 $@
}
意图是:
- 第一个调用被重定向到一个函数,该函数将执行必要的设置,然后删除自身
- 后续调用将不会经过此包装函数
然而,这是有效的,因为unset
我认为这不会影响父 shell。
还有其他方法可以处理需要自动初始化代码的程序吗(在 bash 和/或 zsh 中)?
答案1
虽然不太好,但我找到了一个解决方法
alias ros2='[ -z $ROS_SOURCED ] && source /opt/ros/eloquent/setup.bash; ROS_SOURCED=1;ros2'
这将处理来源并跟踪其是否有来源。