2010-10-02 15 views
5

Tengo una aplicación que se ejecuta como un proceso en un servidor ubuntu. Esta aplicación tiene un gui de línea de comandos que me permite escribir un comando, luego presionar enter y el comando se ejecuta. Puedo guiar la determinación de la identificación del proceso. Entonces la siguiente secuencia de comandos que le comunique el comando: variacionesenviando el comando para procesar usando/proc

# echo "command" > /proc/<PROCESSID>/fd/0 

he tratado de

# echo "command" > /proc/<PROCESSID>/fd/0 

# echo -e "command\r" > /proc/<PROCESSID>/fd/0 

# echo -e "command\c" > /proc/<PROCESSID>/fd/0 
# echo -e "\015" > /proc/<PROCESSID>/fd/0 

Sé que el programa está recibiendo el mando, pero no lo ejecuta. Sospecho que esto se debe a que no presiono físicamente Enter y posiblemente la línea de comando lo esté esperando. ¿Puede alguien aconsejarme sobre cómo estoy usando esto incorrectamente o una mejor opción?

+0

'Command line GUI'? O 'línea de comando UI'? Si dirige el proceso de forma ortodoxa, ¿qué escribe en el teclado? ¿O tienes que hacer algo con el mouse también? ¿Cómo sabes que el proceso está recibiendo el comando? –

+0

IU de la línea de comandos, creo que sería mejor describirlo, no hay interacción con el mouse. Normalmente ejecuto el programa a través de ssh y aparece una línea de comando basada en texto. En esta interfaz puedo escribir comandos y se ejecutan. Si abro una segunda interfaz ssh por separado, puedo escribir echo "comando">/proc//fd/0 después de determinar la identificación del proceso y aparece en la interfaz ssh original pero no se ejecuta. – RandyMorris

+0

Pregunta relacionada: [Inyectar golpe de teclado a un proceso diferente usando Bash] (http://stackoverflow.com/a/11199135/929437) – aland

Respuesta

4

Usted no puede hacer eso./proc/fd/0 es (generalmente) no una tubería en la que puede escribir y dar la entrada del proceso.

Lo que necesita hacer, es invocar el proceso con su stdin proveniente de algo que ES una tubería (o zócalo, etc.) para que pueda escribir cosas en ella.

Un tubo con nombre PUEDE funcionar aquí (vea mknod (1) o mkfifo (3)).

De lo contrario, necesitará un programa de control que se encuentra frente a él y utiliza un par de tuberías para hablar con él.

+0

tenías razón, estaba enviando el texto a la interfaz, no al programa. Tendré que hacer lo que me aconsejó y crear un programa para actuar como un conducto adecuado. gracias. – RandyMorris

2

Sin conocer los detalles, es probable que tenga esto: expect

+0

He leído un poco sobre esto, parece que esta es la opción para usar si está esperando un cierto aviso al que puedes responder programáticamente. ¿Todavía sugieres esto si no hay tal aviso? Intento utilizar la codificación mínima y limpia posible, pero si el uso de otra biblioteca es la mejor respuesta, lo acepto con gratitud ... – RandyMorris

+0

De su comentario sobre la respuesta anterior, parece que está esperando algún tipo de mensaje: "y una línea de comando basada en texto aparece " – ennuikiller

+0

esto fue muy interesante de leer, gracias por tu comentario: D – RandyMorris

Cuestiones relacionadas