Automatisieren Sie einen Prozess mit dem Bash-Skript

469
sbhatt

Ich habe einen unimrcp-Client-Prozess (ucp) und möchte mehrere ucp-Dateien mit einem Shell-Skript erzeugen.

Immer wenn ich ein ucp spawne, wird eine Befehlszeile zurückgegeben, über die ich auf verschiedene Funktionen in ucp zugreifen kann. Ich möchte also ein Skript schreiben, das folgendes erreicht:

  1. Einen ucp-Prozess erzeugen
  2. Warten Sie, bis die Befehlszeile des ucp angezeigt wird
  3. Zugriff auf die Funktionalität von ucp mit dem Befehl "Recog ausführen"

Beachten Sie, dass ./ucp && run recog nicht funktioniert, da ./ucp erst beendet wird, wenn wir die Befehlszeile von ucp verlassen.

Ich habe folgendes versucht,

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

Das ./ucp &Ergebnis ist jedoch, dass Sie den Client-Prozess starten und dann "?????" schreiben. auf der Client-Konsole in "????" Befehl nicht gefunden. Im Folgenden sind die Protokolle

./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: ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 

Ist dies der richtige Weg, um das zu erreichen, was ich in der Frage erwähnt habe? (einen Client erzeugen und einen Befehl auf seiner Konsole ausführen)? Wenn ja, warum führt das Ergebnis "./ucp &" zum Lesen von "?????" in Anbetracht dessen als Eingabe für die Konsole? Beachten Sie, dass dies nicht der Fall ist, wenn Sie einfach "./ucp & fg" von der Konsole aus feuern. Das erwartete Verhalten des Befehls wird angezeigt, wenn ich es von der Konsole aus mache. Das Problem wird angezeigt, wenn ich versuche, das Skript auszuführen.

Wenn dies nicht der richtige Weg ist, wie kann ich das erreichen, was ich in der Frage erwähnt habe? (1, 2 und 3)

Vielen Dank

0
[Ist das Cross-Posting einer Frage auf mehreren Stack Exchange-Sites zulässig, wenn die Frage für jeden Standort themenbezogen ist?] (Https://meta.stackexchange.com/q/64068/355310) Kamil Maciorowski vor 5 Jahren 0
Okay. Ich werde die Frage von der anderen Seite löschen. Danke für den Hinweis. sbhatt vor 5 Jahren 0

1 Antwort auf die Frage

1
NightSicarius

Klingt, als würden Sie Eingaben an den Standard eines Hintergrundprozesses senden. Eine Möglichkeit, dies zu tun, wäre die Verwendung einer Named Pipe.

# 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 

Ich habe dies mit einem einfachen Bash-Skript getestet, das die Eingabe einfach wiederholt und es scheint, wie erwartet zu funktionieren.

Danke für die Antwort. Es ist eine wirklich interessante Lösung. Es steckte jedoch in cat / tmp / ucp-input | ./ucp & part trifft auf das gleiche Problem, das ich in der Frage erwähnt habe. https://unix.stackexchange.com/questions/477612/automate-a-process-using-bash-script hat eine Lösung für dieses bestimmte Problem. Aber ich mag deine Lösung. Es ist ordentlich. Lassen Sie mich sehen, ob das in der Frage erwähnte Problem gelöst werden kann. Danke noch einmal sbhatt vor 5 Jahren 0