У меня есть клиентский процесс unimrcp (ucp), и я хочу создать несколько ucp, используя скрипт оболочки.
Всякий раз, когда я порождаю UCP, он возвращает командную строку, с помощью которой я могу получить доступ к различным функциям в UCP. Итак, я хочу написать сценарий, который достигает следующего,
Порождает процесс ucp
дождитесь появления командной строки UCP
получить доступ к функциональности ucp с помощью команды "run recog"
Обратите внимание, что ./ucp && run recog не работает, поскольку ./ucp завершается только после того, как мы выйдем из командной строки ucp.
Я попробовал следующее для этого,
#!/bin/bash ./ucp & fg echo "run recog uni2" wait
Тем не менее, в ./ucp &результате запускается клиентский процесс, а затем пишет «?????» на клиентской консоли, в результате чего "????" команда не найдена. Ниже приведены журналы,
Это правильный способ достичь того, что я упомянул в вопросе? (порождает клиента и запускает команду на его консоли)? Если да, почему «./ucp &» приводит к чтению «?????» рассматривая это как ввод в свою консоль? Обратите внимание, что этого не произойдет, если я просто запусту «./ucp & fg» из консоли. Он может увидеть ожидаемое поведение команды, когда я делаю это с консоли. Проблема появляется, когда я пытаюсь выполнить скрипт.
Если это не правильный путь, как я могу достичь того, что я упомянул в вопросе? (1, 2 и 3)
Спасибо
[Допускается ли перекрестная публикация вопроса на нескольких сайтах Stack Exchange, если вопрос является тематическим для каждого сайта?] (Https://meta.stackexchange.com/q/64068/355310)
Kamil Maciorowski 6 лет назад
0
Хорошо. Я удалю вопрос с другого сайта. Спасибо за указатель.
sbhatt 6 лет назад
0
1 ответ на вопрос
1
NightSicarius
Звучит так, будто вы хотите отправить ввод в стандартный поток фонового процесса. Один из способов сделать это - использовать именованный канал.
# Create a named pipe mkfifo /tmp/ucp-input # Run the background service using the named pipe as stdin cat /tmp/ucp-input | ./ucp & # Echo commands to the named pipe to send them to the service's stdin echo "run recog uni2" > /tmp/ucp-input
Я проверил это с помощью простого скрипта Bash, который просто отображает входные данные и работает, как и ожидалось.
Спасибо за ответ. Это действительно интересное решение. Тем не менее, он застрял в cat / tmp / ucp-input | ./ucp & part сталкивается с той же проблемой, о которой я упоминал в этом вопросе. https://unix.stackexchange.com/questions/477612/automate-a-process-using-bash-script имеет решение этой конкретной проблемы. Но мне нравится ваше решение. Это аккуратно. Позвольте мне посмотреть, можно ли решить проблему, упомянутую в вопросе. еще раз спасибо
sbhatt 6 лет назад
0