2008-12-19 4 views
5

Problème: Le client X est un utilisateur Windows qui souhaite pouvoir déclencher des commandes bash préemballées à l'aide de mots-clés mnémoniques ou de "conseils sur les balises" lorsqu'il est connecté à sa boîte RedHat via shell. Exemple: Le client X se connecte à l'hôte à l'aide de ssh et souhaite effectuer certaines opérations sur les fichiers de routine. Elle veut être en mesure de taperscript bash pour afficher les commandes compatibles basées sur "Windows-speak"

copy file 

et obtenez une liste de fill-in-the-blank bash pré-fab commandes à choisir

cp <@[email protected]> <@[email protected]>    ### simple copy 
cp -R <@[email protected]> <@[email protected]>  ### recursive copy 

elle veut ensuite pouvoir sélectionner remplissez le (s) blanc (s) et appuyez simplement sur Entrée pour lancer la commande. Le client X est prêt à spécifier à l'avance les commandes qu'elle est susceptible d'utiliser (dans windows-speak), puis à engager le développeur pour les traduire en commandes bash, puis les mettre ensemble dans un script qui permet elle parle des fenêtres - parle à bash et récupère la liste des commandes.

REMARQUE: Le client X n'aime pas les propositions, car il suppose que les termes utilisés dans bash sont familiers, contrairement aux fenêtres. Par exemple:

apropos shortcut 

ne sait lui donner rien sur la création des liens symboliques (même si c'est exactement ce qu'elle veut) parce qu'elle n'a pas ce que les raccourcis fenêtres sont appelés sous Linux. Évidemment, les concepts de Windows ne dépassent pas 100%, donc elle devra apprendre par la suite, mais elle est une personne occupée et demande cela comme un moyen de la «faciliter» dans la compréhension linux.

Quelle est la meilleure façon de commencer quelque chose comme ça? Y a-t-il un script perl, python, ruby ​​qui fait quelque chose comme ça? Y a-t-il quelque chose dans bash qui peut simuler ce genre de demande de fonctionnalité?

+0

+1 pour une question très bien formulée. Un bel exemple à suivre. (+1 à votre client pour vouloir apprendre au lieu de vouloir répliquer) –

Répondre

5

Ce que vous voulez probablement est de surcharger le gestionnaire command-not-found de bash. Voici la section /etc/bash.bashrc dans une installation standard d'Ubuntu qui installe le gestionnaire:

... 
# if the command-not-found package is installed, use it 
if [ -x /usr/lib/command-not-found ]; then 
     function command_not_found_handle { 
       # check because c-n-f could've been removed in the meantime 
       if [ -x /usr/lib/command-not-found ]; then 
        /usr/bin/python /usr/lib/command-not-found -- $1 
        return $? 
       else 
        return 127 
       fi 
     } 
fi 
... 

En effet, si une commande est introuvable, un programme défini par l'utilisateur est exécuté avec cette commande comme paramètre. Dans le cas d'Ubuntu, c'est un programme Python qui vérifie si la commande tapée par l'utilisateur est une application valide qui peut être installée, et si c'est le cas, informe l'utilisateur qu'il peut l'installer.

Ce que vous voulez probablement faire est de le comparer à votre hashref de commandes et de chaînes d'utilisation et d'afficher celui qui convient s'il y a correspondance.