使用 Bash 脚本自动化进程

使用 Bash 脚本自动化进程

我有一个 unimrcp 客户端进程 (ucp),我想使用 shell 脚本生成多个 ucp。

每当我生成一个 ucp 时,它都会返回一个命令行,我可以使用这个命令行访问 ucp 中的不同功能。因此,我想编写一个脚本来实现以下功能:

  1. 生成一个 ucp 进程
  2. 等到 ucp 的命令行出现
  3. 使用命令“run recog”访问 ucp 的功能

请注意,./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

听起来您想将输入发送到后台进程的标准输入。一种方法是使用命名管道。

# 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 脚本对此进行了测试,该脚本仅回显输入并且它似乎按预期工作。

相关内容