私はいくつかのTeam Fortress 2サーバを稼働させており、少し管理スクリプトを書いています。bashの非ブロック化FIFOに関する問題
基本的にはTF2サーバーは、サーバーのコンソールを提供FGプロセスですので、私は、サーバーを起動するタイプの状態と、それから答えを得ることができます。
***@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
グレート、今私は、スクリプトを作成したいですすべてのサーバにコマンドsm_reloadadminsを送信します。私がこれを行うために見つけた最良の方法は、fifoという名前のパイプを使用することです。 ここで私がしたいのは、このパイプを読み取り専用にしてサーバープロセスにブロックしないようにすることです。パイプに書き込むことができ、サーバーはそれを実行しますが、コンソールを介してサーバーに書き込むため、サーバーのfgプロセスに入力し、ステータスを入力して回答を出力します。
は、私は(serverfifoははmkfifo serverfifoであると仮定して)これを試してみました:
./start_server_testing < serverfifo
は機能していない何かがパイプに書き込まれるまで、サーバーは起動しません。
./start_server_testing <> serverfifo
ザッツは実際にはかなり良い働いて、私は、サーバーのコンソール出力を見ることができると私は、FIFOに書き込むことができますし、サーバーがコマンドを実行するが、私はもう、サーバーへのコンソール経由で書き込むことはできません。また、パイプ(サーバーを終了する必要があります)に 'exit'と書いて、スクリーンのウィンドウを何らかの理由で強制終了させてしまっています(なぜ?)。
私はブロックすることなくfifoを読み込むだけで、サーバー自体のキーボード入力はすべてサーバーに送信し、すべてのサーバー出力はコンソールに書き込む必要があります。
これは可能ですか?はいの場合、どうですか?
"./start_server_testing <> serverfifo"を使用していると仮定しています。stdioをserverfifoに再マップして、キーボードをstdioとして失います。 2つのソースをプロセスのstdioにマップすることは可能ですか(私の場合はキーボードとサーバフィジオになります) – timdel
最近の追加を削除しました。あなたのサイトがあなたを助けたとは思わないと申し訳ありませんが、(あなたのコメントを)私は自分以外の誰も "怒っている"という証拠を見ることはできません。あなたが望んでいたもの... –