Ich bin ein paar Team Fortress 2-Servern laufen und ich möchte ein kleines Management-Skript schreiben.Problem mit nicht blockierenden Fifo in bash
Grundsätzlich sind die TF2-Server sind ein fg Prozess, der eine Server-Konsole bietet, so kann ich den Server, Typ Status starten und eine Antwort von ihm bekommen:
***@purple:~/tf2$ ./start_server_testing
Auto detecting CPU
Using AMD Optimised binary.
Server will auto-restart if there is a crash.
Console initialized.
[bla bla bla]
Connection to Steam servers successful.
VAC secure mode is activated.
status
hostname: Team Fortress
version : 1.0.6.1/15 3883 secure
udp/ip : ***.***.133.31:27600
map : ctf_2fort at: 0 x, 0 y, 0 z
players : 0 (2 max)
# userid name uniqueid connected ping loss state adr
Große, jetzt möchte ich ein Skript erstellen welches den Befehl sm_reloadmins an alle meine Server sendet. Der beste Weg, um dies zu tun, ist eine Fifo namens Pipe. Nun, was ich tun möchte, ist diese Pipe schreibgeschützt und nicht blockierend für den Server-Prozess, so dass ich in die Pipe schreiben kann und der Server führt es aus, aber ich möchte immer noch über Konsole eins den Server schreiben, also wenn ich zurückwechsle zum fg-Prozess des Servers und ich tippe Status möchte ich eine Antwort gedruckt.
Ich versuchte dies (unter der Annahme serverfifo mkfifo serverfifo ist):
./start_server_testing < serverfifo
nicht funktioniert, wird der Server nicht gestartet, bis etwas auf das Rohr geschrieben.
./start_server_testing <> serverfifo
Das ist eigentlich ziemlich gut funktioniert, ich die Ausgabe der Konsole des Servers sehen und ich kann auf die Fifo schreiben, und der Server führt die Befehle aus, aber ich kann über die Konsole auf den Server nicht mehr schreiben. Wenn ich 'exit' in die Pipe schreibe (was den Server beenden soll) und ich es auf einem Bildschirm laufe, wird das Bildschirmfenster aus irgendeinem Grund gelöscht (wtf warum?).
Ich brauche nur den Server zu lesen, die Fifo ohne Blockierung und alle meine Tastatur-Eingabe auf dem Server selbst sollte an den Server gesendet werden und alle Server-Ausgang sollte auf der Konsole geschrieben werden.
Ist das möglich? Wenn ja, wie?
Ich nehme an, indem ich "./start_server_testing <> serverfifo" verwende, ordne ich das stdio zu serverfifo zu, so verliert es meine Tastatur als stdio. Ist es möglich, dem stdio eines Prozesses zwei Quellen zuzuordnen (was in meinem Fall Keyboard und Serverfifo wäre). – timdel
Ich habe Ihren letzten Eintrag gelöscht, einfach weil es keine Antwort war. Es tut mir leid, dass du nicht das Gefühl hast, dass die Seite dir geholfen hat, aber (re deinen Kommentar) Ich kann keine Beweise sehen, dass jemand "sauer" wird außer dir selbst - einfach jemand, der dir ihre Idee gab, die nicht passte Was Sie wollten ... –