Question

J'ai écrit une commande intégrée pour bash qui modifie la commande "cd", une exigence de mon logiciel. Existe-t-il un moyen de distribuer un objet chargeable indépendamment de bash lui-même? Je souhaiterais idéalement ne distribuer qu'une goutte dans "fonctionnalité supplémentaire". parce que je sais que les gens peuvent être rebutés en patchant et en compilant leur shell à partir du code source.

Je souhaite chronométrer combien de temps un utilisateur est dans un répertoire pour pouvoir déterminer où il veut être. C’est cette fonctionnalité: http://github.com/joelthelion/autojump/tree/master réécrit en tant que bash intégré pour les problèmes de performances. Cette implémentation utilise $ PROMPT_COMMAND pour fonctionner mais je voulais quelque chose d’intégré.

Était-ce utile?

La solution

On ne sait pas ce que vous avez modifié mais dans tous les cas, bash (comme au moins ksh93 dont IIRC a introduit le concept et zsh ) prend en charge, en utilisant la syntaxe enable -f nom de fichier , le chargement de fonctions intégrées en tant que modules externes chargés dynamiquement.

Ces modules, en tant que fichiers ordinaires, peuvent certainement être distribués indépendamment, à condition de vous assurer qu'ils sont compatibles avec la version / architecture cible. C’était déjà vrai il ya 5 ans lorsque vous avez posé cette question.

Un problème dans votre cas est qu’il ne semble exister aucun moyen documenté de surcharger un composant interne intégré tel que cd par un système chargé de manière dynamique tout en conservant la possibilité d’accéder à celui-ci.

Une solution de contournement simple consisterait à implémenter votre cd personnalisé avec un nom différent, par exemple mycd, comme ceci:

int mycd_builtin(list)
WORD_LIST *list;
{
  int rv;
  rv=cd_builtin(list);
  if(rv == EXECUTION_SUCCESS) {
    char wd[PATH_MAX+1];
    getcwd(wd,sizeof(wd));
    // do your custom stuff knowing the new working directory
    ...
  }
  return (rv);
}

puis utiliser un alias, ou mieux, une fonction de shell pour votre version personnalisée à utiliser à la place de celle habituelle:

cd() {
  mycd "$@"
}

Tant que votre personnalisation n'affecte pas le comportement de la commande standard et ne risque donc pas de casser les scripts qui l'utilisent, votre approche est sans faille.

Autres conseils

Changer le cd intégré est un cauchemar de support pour tout administrateur et indésirable pour les utilisateurs étrangers. Qu'y a-t-il de mal à le nommer 'smart-cd' et à laisser l'UTILISATEUR décider s'il veut la fonctionnalité en l'incluant dans son fichier .bashrc ou .profile? Ensuite, ils peuvent configurer les objets comme ils le souhaitent.

De même, utiliser depuis combien de temps vous êtes dans un répertoire est un très mauvais indicateur de préférence. Quelle distinction faites-vous entre la marche au ralenti (un shell oublié pendant la nuit dans / tmp), les scripts de longue durée (tâches cron nocturnes) et l’activité réelle.

Il existe une multitude d'autres méthodes pour créer des raccourcis vers les répertoires favoris: alias, liens symboliques, $ VARIABLES, scripts. Il est arrogant de votre part de supposer que vos habitudes d'utilisation seront bien accueillies par les autres utilisateurs de votre système.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top