我正在运行一些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