2010-10-02 19 views
5

Mam aplikację, która działa jako proces na serwerze ubuntu. Ta aplikacja ma gui w wierszu poleceń, które pozwala mi wpisać polecenie, a następnie naciśnij klawisz enter i polecenie zostanie uruchomione. Jestem w stanie zakodować ustalenie identyfikatora procesu. Następnie dodaje skrypt do wysyłania mu polecenie:Wysyłanie polecenia do przetwarzania za pomocą/proc

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

próbowałem wariacje

# 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 

Znam program jest coraz polecenia, ale nie wykonuje go. Podejrzewam, że to dlatego, że nie jestem fizycznie naciskając enter i prawdopodobnie linia poleceń tego oczekuje. Czy ktoś może mi doradzić, w jaki sposób używam tego nieprawidłowo lub lepiej?

+0

"GUI wiersza polecenia"? Lub "interfejs wiersza poleceń"? Jeśli prowadzisz proces w sposób ortodoksyjny, co piszesz na klawiaturze? Czy też musisz coś zrobić za pomocą myszy? Skąd wiesz, że proces uzyskuje polecenie? –

+0

Interfejs wiersza poleceń najlepiej byłoby opisać, nie ma interakcji z myszą. Zazwyczaj uruchamiam program przez ssh i pojawia się tekstowa linia poleceń. W tym interfejsie mogę wpisywać komendy i są one wykonywane. Jeśli otworzę drugi osobny interfejs ssh, po określeniu identyfikatora procesu mogę wpisać echo "command">/proc//fd/0 i pojawi się ono w oryginalnym interfejsie ssh, ale nie zostanie wykonane. – RandyMorris

+0

Powiązane pytanie: [Inject Keystroke do różnych procesów za pomocą Bash] (http://stackoverflow.com/a/11199135/929437) – aland

Odpowiedz

4

Nie można tego zrobić./proc/fd/0 to (zwykle) nie jest to rura, do której możesz pisać i podać dane wejściowe procesu.

To, co musisz zrobić, to wywołać proces ze stdinem pochodzącym z czegoś, co jest rurą (lub gniazdem itp.), Aby można było w nim pisać.

Nazwana fajka MOŻE pracować tutaj (patrz mknod (1) lub mkfifo (3)).

W przeciwnym razie potrzebny jest program kontrolny, który znajduje się przed nim i używa pary rur do komunikowania się z nim.

+0

miałeś rację, wysłałem tekst do interfejsu, a nie do programu. Będę musiał postąpić zgodnie z twoją radą i stworzyć program, który będzie działał jak dobra rura. Dziękuję Ci. – RandyMorris

2

Nie znając szczegółów, prawdopodobnie trzeba to: expect

+0

Przeczytałem trochę na ten temat, wydaje się, że jest to opcja do użycia, jeśli oczekujesz pewien monit, na który można programowo odpowiedzieć. Czy nadal sugerowałbyś, że nie ma takiego polecenia? Staram się używać minimalnego i czystego kodowania, ale jeśli korzystam z innej biblioteki to najlepsza odpowiedź, z wdzięcznością przyjmuję ... – RandyMorris

+0

Z Twojego komentarza dotyczącego powyższej odpowiedzi wynika, że ​​spodziewasz się pewnego rodzaju zachęty: "i pojawia się tekstowa linia poleceń: " – ennuikiller

+0

było to bardzo interesujące do przeczytania, dziękuję za komentarz: D – RandyMorris

Powiązane problemy