2010-10-02 23 views
5

Ho un'applicazione che viene eseguita come processo su un server ubuntu. Questa applicazione ha una GUI da linea di comando che mi consente di digitare un comando, quindi premere invio e il comando viene eseguito. Sono in grado di scrivere la determinazione dell'id del processo. Ho poi scritto quanto segue per inviare un comando: variazioniinviando il comando per elaborare utilizzando/proc

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

ho cercato di

# 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 

So che il programma è sempre il comando, ma non eseguirlo. Sospetto che sia perché non sto premendo fisicamente enter e forse la linea di comando si aspetta questo. Qualcuno può consigliarmi su come sto usando questo in modo errato o un'opzione migliore?

+0

'GUI riga di comando'? O 'riga di comando UI'? Se stai guidando il processo in modo ortodosso, cosa digiti sulla tastiera? O devi fare qualcosa anche con il mouse? Come sai che il processo sta ricevendo il comando? –

+0

Riga di comando L'interfaccia utente sarebbe meglio descriverla, non c'è interazione con il mouse. In genere eseguo il programma tramite ssh e viene visualizzata una riga di comando basata su testo. In questa interfaccia posso digitare i comandi e vengono eseguiti. Se apro una seconda interfaccia ssh separata, posso digitare echo "command">/proc//fd/0 dopo aver determinato l'id del processo e appare nell'interfaccia ssh originale ma non viene eseguito. – RandyMorris

+0

Domanda correlata: [Iniettare la sequenza di tasti su diversi processi usando Bash] (http://stackoverflow.com/a/11199135/929437) – aland

risposta

4

Non si può farlo./proc/fd/0 è (di solito) non una pipe su cui è possibile scrivere e fornire l'input del processo.

Quello che devi fare è invocare il processo con il suo stdin proveniente da qualcosa che è una pipe (o socket, ecc.) In modo che tu possa scrivere cose in esso.

Una pipe denominata può funzionare qui (vedere mknod (1) o mkfifo (3)).

In caso contrario, è necessario un programma di controllo che si trova di fronte ad esso e utilizza un paio di tubi per parlare con esso.

+0

avevi ragione, stavo inviando il testo all'interfaccia, non al programma. Dovrò fare come consigliato e creare un programma per fungere da pipe corretta. grazie. – RandyMorris

2

Senza conoscere le specifiche, probabilmente avete bisogno di questo: expect

+0

Ho letto un po 'su questo, sembra che questa sia l'opzione da usare se si aspetta un alcuni prompt a cui è possibile rispondere in modo programmatico. Suggeriresti ancora questo se non c'è una tale richiesta? Cerco di usare la codifica minima e pulita possibile, ma se l'utilizzo di un'altra libreria è la migliore risposta, accetterò con gratitudine ... – RandyMorris

+0

Dal tuo commento sulla risposta sopra, sembra che ti aspetti una sorta di prompt: "e viene visualizzata una riga di comando basata su testo " – ennuikiller

+0

questo è stato molto interessante da leggere, grazie per il tuo commento: D – RandyMorris

Problemi correlati