2009-03-14 8 views
1

J'ai écrit un module intégré pour bash qui modifie la commande 'cd', une exigence pour mon logiciel. Existe-t-il un moyen de distribuer réellement un loadable indépendamment de bash lui-même? J'aimerais idéalement distribuer juste une goutte de "fonctionnalité supplémentaire" parce que je sais que les gens peuvent être rebutés par patcher et compiler leur shell à partir du code source.Distribution de modules bash intégrés chargeables

Je veux savoir 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 comme un bash intégré, pour des problèmes de performance. Cette implémentation utilise $PROMPT_COMMAND pour fonctionner mais je voulais quelque chose d'intégré.

Répondre

2

On ne sait pas ce que vous avez modifié mais en tout cas, bash (comme au moins ksh93 qui IIRC a introduit le concept et zsh) prend en charge, en utilisant la syntaxe enable -f file name, le chargement des fonctions intégrées sous forme de modules externes chargés dynamiquement.

Ces modules étant des fichiers simples peuvent certainement être distribués indépendamment, tant que vous vous assurez qu'ils sont compatibles avec la version/l'architecture cible. C'était déjà vrai il y a 5 ans quand vous avez posé cette question. Un problème dans votre cas est qu'il ne semble y avoir aucun moyen documenté de surcharger un interne intégré comme cd par un chargé dynamiquement tout en gardant la possibilité d'accéder à la première.

Une solution simple serait de mettre en œuvre votre cd personnalisé avec un nom différent, disons 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 shell pour votre version personnalisée pour être utilisé au lieu de l'ordinaire:

cd() { 
    mycd "[email protected]" 
} 

tant que votre personnalisation ne modifie pas le comportement de la commande standard et ne risque donc pas casser des scripts à l'aide, il n'y a rien de mal dans votre approche.

+0

Un peu de contre-googler et de chercher réellement 'help enable' dans mon shell m'amène à conclure que vous avez raison. – Philluminati

+0

Merci d'avoir pris le temps de répondre à cette question. – Philluminati

+2

Il m'a fallu quatre ans ;-) – jlliagre

2

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

De même, l'utilisation de la durée de votre présence dans un répertoire est une indication de préférence plutôt faible. Comment feriez-vous la distinction entre la marche au ralenti (une coquille oubliée suspendue dans/tmp pendant la nuit), les scripts de longue durée (les tâches nocturnes de cron) et l'activité réelle.

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

Questions connexes