У меня есть клиентский процесс 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 &
результате запускается клиентский процесс, а затем пишет «?????» на клиентской консоли, в результате чего "????" команда не найдена. Ниже приведены журналы,
./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)
Спасибо
источник
Ответы:
Звучит так, будто вы хотите отправить ввод в стандартный поток фонового процесса. Один из способов сделать это - использовать именованный канал.
Я проверил это с помощью простого скрипта Bash, который просто отображает входные данные и работает, как и ожидалось.
источник