Я запускаю несколько серверов Team Fortress 2, и я хочу написать небольшой скрипт управления.Проблема с неблокированием fifo в bash
В основном сервера TF2 это процесс фга, который предоставляет консоль сервера, так что я могу запустить сервер, состояние типа и получить ответ от него:
***@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 named pipe. Теперь я хочу, чтобы этот канал был только для чтения и не блокировал серверный процесс, поэтому я могу писать в трубу, и сервер выполняет его, но все же я хочу написать через консоль один сервер, поэтому, если я вернусь обратно к процессу fg сервера и статусу типа I Я хочу, чтобы был напечатан ответ.
Я попытался это (при условии, 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
Я удалил ваше последнее дополнение, просто потому, что это был не ответ. Мне жаль, что вы не чувствуете, что сайт вам помог, но (ваш комментарий). Я не вижу никаких доказательств того, что кто-то становится «злым», кроме вас самих, - просто тот, кто дал вам свою идею, которая не подходила что вы хотели ... –