2010-10-02 3 views
5

У меня есть приложение, которое выполняется как процесс на сервере ubuntu. Это приложение имеет командную строку gui, которая позволяет мне вводить команду, затем нажмите enter и команда запускается. Я могу списать определение идентификатора процесса. Я тогда сценарий следующий послать ему команду:отправка команды для обработки с использованием/proc

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

я попытался вариации

# 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 

Я знаю, программа получает команду, но не выполняет его. Я подозреваю, что это потому, что я физически не нажимаю кнопку ввода, и, возможно, в командной строке это ожидает. Может ли кто-нибудь посоветовать мне, как я использую этот неправильный или лучший вариант?

+0

«Командная строка GUI»? Или «интерфейс командной строки»? Если вы управляете процессом по-православному, что вы набираете на клавиатуре? Или вам нужно что-то делать с помощью мыши? Откуда вы знаете, что процесс получает команду? –

+0

Пользовательский интерфейс командной строки, я думаю, лучше всего описать его, нет взаимодействия с мышью. Обычно я запускаю программу через ssh и появляется текстовая командная строка. В этом интерфейсе я могу вводить команды, и они выполняются. Если я открою второй отдельный ssh-интерфейс, я могу ввести echo «command»>/proc//fd/0 после определения идентификатора процесса и он появляется в исходном интерфейсе ssh, но не выполняется. – RandyMorris

+0

Связанные вопрос: [Inject Keystroke к другому процессу с помощью Bash] (http://stackoverflow.com/a/11199135/929437) – aland

ответ

4

Вы не можете сделать это./proc/fd/0 - это (обычно) не труба, которую вы можете написать, и дать вход процесса.

Что вам нужно сделать, это вызвать процесс с его STDIN исходя из чего-то, что является труба (или розетка и т.д.), так что вы можете писать вещи в нем.

Именованная труба может работать здесь (см MKNOD (1) или mkfifo (3)).

В противном случае, вам понадобится программа управления, которая сидит перед ним и использует пару труб, чтобы поговорить с ним.

+0

вы были правы, я отправлял текст на интерфейс, а не на программу. Мне нужно будет сделать то, что вы посоветуете, и создать программу, чтобы действовать как правильная труба. Спасибо. – RandyMorris

2

Не зная специфики, вы, вероятно, нужно это: expect

+0

Я прочитал немного на это, кажется, это возможность использовать, если вы ожидаете некоторые подсказки, на которые вы можете программно реагировать. Не могли бы вы предложить это, если нет такого приглашения? Я стараюсь использовать как минимальное и чистое кодирование, насколько это возможно, но если использовать другую библиотеку - лучший ответ, я с благодарностью соглашусь ... – RandyMorris

+0

Из вашего комментария к вышеприведенному ответу кажется, что вы ожидаете своего рода подсказки: «и появляется текстовая командная строка « – ennuikiller

+0

Это было очень интересно прочитать, спасибо за ваш комментарий: D – RandyMorris

Смежные вопросы