2008-12-19 11 views
5

Problema: Cliente X es un usuario de Windows que desea poder desencadenar comandos bash preempaquetados utilizando palabras clave mnemotécnicas o "sugerencias de etiquetas" cuando está ha iniciado sesión en su caja RedHat a través de shell.script bash para mostrar comandos compatibles basados ​​en "Windows-speak"

Ejemplo: Cliente X inicia sesión en el host utilizando ssh y desea realizar algunas operaciones de archivos de rutina. Ella quiere ser capaz de escribir

copy file 

y volver a una lista de pre-fab de relleno en el espacio en blanco fiesta de comandos para elegir

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

entonces ella quiere ser capaz de seleccionar uno de estos elementos, complete los espacios en blanco y simplemente presione enter para ejecutar el comando.

El Cliente X está dispuesto a especificar de antemano los comandos que probablemente querrá usar (en Windows-speak) y luego contratar al desarrollador para traducirlos en comandos bash, y luego juntarlos en un script que permita ella para hablar ventanas, hablar con bash y recuperar la lista de comandos.

NOTA: al Cliente X no le gusta apropos porque asume que está familiarizado con los términos utilizados en bash, a diferencia de Windows-speak. Por ejemplo:

apropos shortcut 

no le da nada acerca de la creación de enlaces simbólicos (aunque eso es exactamente lo que quiere) porque ella no sabe qué ventanas accesos rápidos se denominan en Linux. Obviamente, los conceptos de Windows no tienen más del 100%, por lo que tendrá que aprender eventualmente, pero ella es una persona ocupada y está pidiendo esto como una forma de "facilitarle" la comprensión de Linux.

Pregunta: ¿Cuál es la mejor manera de comenzar en algo como esto? ¿Hay un script en perl, python, ruby ​​por ahí que ya haga algo como esto? ¿Hay algo en bash que pueda simular este tipo de solicitud de función?

+0

+1 para una pregunta muy bien formada. Un gran ejemplo a seguir. (+1 a su cliente por querer aprender en lugar de querer replicación) –

Respuesta

5

Lo que probablemente quiera es anular el controlador command-not-found de bash. Aquí está la sección en la /etc/bash.bashrc Ubuntu en una instalación estándar que instala el controlador:

... 
# 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 efecto, si no se encuentra un comando, un programa especificado por el usuario se ejecuta con ese comando como parámetro. En el caso de Ubuntu, se trata de un programa de Python que verifica si el comando que escribió el usuario es una aplicación válida que se puede instalar, y si lo está, informa al usuario que puede instalarlo.

Lo que probablemente quieras hacer es compararlo con tu hashref de comandos y cadenas de uso y mostrar el apropiado si hay una coincidencia.

Cuestiones relacionadas