У меня есть клиентский процесс 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)

Спасибо

1 ответ1

1

Звучит так, будто вы хотите отправить ввод в стандартный поток фонового процесса. Один из способов сделать это - использовать именованный канал.

# 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, который просто отображает входные данные и работает, как и ожидалось.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .