如何在 Bash 中延迟加载程序的初始化代码?

如何在 Bash 中延迟加载程序的初始化代码?

我想使用roscondapyenv其他需要您在使用之前提供某种初始化代码的程序。但将它们的所有初始化代码添加到 中.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'

这将处理来源并跟踪其是否有来源。

相关内容