我正在運行一些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'並且我在屏幕上運行它,屏幕窗口因爲某種原因而被殺死(wtf爲什麼?)。
我只需要服務器在不阻塞的情況下讀取fifo,並將服務器本身的所有鍵盤輸入發送到服務器,並將所有服務器輸出寫入控制檯。
這可能嗎?如果是,如何?
我假設通過使用「./start_server_testing <> serverfifo」我將stdio重新映射到serverfifo,因此它丟失了我的鍵盤作爲stdio。是否有可能將兩個源映射到一個進程的stdio(這將在我的情況下,鍵盤和serverfifo) – timdel 2009-06-29 13:07:55
我刪除了最近的添加,只是因爲它不是一個答案。對不起,你不覺得這個網站對你有幫助,但是(重新發表你的評論)我看不到任何人除了你自己「生氣」之外的任何證據 - 只是給你提供他們想法的人,不適合你想要什麼...... – 2009-06-30 21:30:11