Автоматизируйте процесс, используя скрипт bash

361
sbhatt

У меня есть клиентский процесс unimrcp (ucp), и я хочу создать несколько ucp, используя скрипт оболочки.

Всякий раз, когда я порождаю UCP, он возвращает командную строку, с помощью которой я могу получить доступ к различным функциям в UCP. Итак, я хочу написать сценарий, который достигает следующего,

  1. Порождает процесс ucp
  2. дождитесь появления командной строки UCP
  3. получить доступ к функциональности ucp с помощью команды "run recog"

Обратите внимание, что ./ucp && run recog не работает, поскольку ./ucp завершается только после того, как мы выйдем из командной строки ucp.

Я попробовал следующее для этого,

#!/bin/bash  ./ucp &  fg  echo "run recog uni2"  wait  

Тем не менее, в ./ucp &результате запускается клиентский процесс, а затем пишет «?????» на клиентской консоли, в результате чего "????" команда не найдена. Ниже приведены журналы,

./script.sh  2018-10-23 14:36:53:618851 [INFO] Set Property ip:127.0.0.1 2018-10-23 14:36:53:618851 [INFO] Register Codec [PCMU] 2018-10-23 14:36:53:618851 [INFO] Register Codec [PCMA] 2018-10-23 14:36:53:618851 [INFO] Register Codec [L16] 2018-10-23 14:36:53:618851 [NOTICE] Register Resource [speechsynth] 2018-10-23 14:36:53:618851 [NOTICE] Register Resource [speechrecog] 2018-10-23 14:36:53:620588 [NOTICE] Register Resource [recorder] 2018-10-23 14:36:53:620588 [NOTICE] Register Resource [speakverify] 2018-10-23 14:36:53:620593 [INFO] Register Resource Factory 2018-10-23 14:36:53:620600 [NOTICE] Create SofiaSIP Agent [SIP-Agent-1] [1.12.11-227-g73efc97] sip:127.0.0.1:8062;transport=udp 2018-10-23 14:36:53:620600 [INFO] Register Signaling Agent [SIP-Agent-1] 2018-10-23 14:36:53:620600 [NOTICE] Create RTSP Client [RTSP-Agent-1] [100] 2018-10-23 14:36:53:620600 [INFO] Register Signaling Agent [RTSP-Agent-1] 2018-10-23 14:36:53:620600 [NOTICE] Create MRCPv2 Agent [MRCPv2-Agent-1] [100] 2018-10-23 14:36:53:620600 [INFO] Register Connection Agent [MRCPv2-Agent-1] 2018-10-23 14:36:53:620600 [NOTICE] Create Media Engine [Media-Engine-1] unknown command: ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 

Это правильный способ достичь того, что я упомянул в вопросе? (порождает клиента и запускает команду на его консоли)? Если да, почему «./ucp &» приводит к чтению «?????» рассматривая это как ввод в свою консоль? Обратите внимание, что этого не произойдет, если я просто запусту «./ucp & fg» из консоли. Он может увидеть ожидаемое поведение команды, когда я делаю это с консоли. Проблема появляется, когда я пытаюсь выполнить скрипт.

Если это не правильный путь, как я могу достичь того, что я упомянул в вопросе? (1, 2 и 3)

Спасибо

0
[Допускается ли перекрестная публикация вопроса на нескольких сайтах 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

Похожие вопросы