1 votes

Comment charger de manière paresseuse le code d'initialisation des programmes en bash ?

Je veux utiliser ros, conda, pyenv ou d'autres programmes qui nécessitent que vous sourciez un certain type de code d'initialisation avant de les utiliser. Mais ajouter tous leurs codes d'initialisation dans .bashrc semble fastidieux au mieux et impraticable au pire ( conda prend quelques secondes pour l'initialisation ).

Dans le meilleur des cas, j'aurais une sorte de fonction comme ceci:

ros2 () {
  # Info
  echo "Premier appel ros2, sourçage des fichiers nécessaires..."

  # Source environnement ros2
  source /opt/ros/eloquent/setup.bash

  # Supprimer cette fonction
  unset -f ros2

  # Exécution initialement prévue
  /opt/ros/eloquent/bin/ros2 $@
}

L'intention était:

  • Le premier appel est redirigé vers une fonction qui effectuera la configuration nécessaire, puis se supprimera
  • Les appels ultérieurs ne passeront pas par cette fonction enveloppe

Cependant, cela ne fonctionne pas, à cause du fait que unset n'affecte pas le shell parent je suppose.

Y a-t-il un autre moyen de gérer automatiquement les programmes nécessitant du code d'initialisation (en bash et / ou zsh) ?

0voto

Meowxiik Points 41

Donc ce n'est pas joli mais j'ai trouvé une solution de contournement

alias ros2='[ -z $ROS_SOURCED ] && source /opt/ros/eloquent/setup.bash; ROS_SOURCED=1;ros2'

Cela prend en charge la source et garde une trace de si elle a été sourcée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X