Re: вопрос к знатокам баша
11.10.13, dimas<dimas000@ya.ru> написал(а):
...
> альтернативные реализации зело непросты (типа как с помощью screen/tmux
> разбить
> окно пополам, но тогда нужно в них запускать отдельные скрипты, которые
> непонятно как должны между собой общаться. и прочее в таком духе, тянущее
> еще
> лишние зависимости). зачем писать такое на баше - отдельный вопрос. скорее
> для
> творческого саморазвития, интересно уже))
Альтернативная реализация
Сервер:
mkfifo /tmp/fifo
chmod a+w /tmp/fifo
while true; do cat /tmp/fifo >> /tmp/discussion; done
Клиенты (или в двух отдельных терминалах, или разбить окно в
screen)
Пользовательский ввод:
while read ; do echo $NICKNAME:$REPLY > /tmp/fifo; done
Вывод:
tail -f /tmp/discussion
Или же просто (в одном терминале)
tail -f /tmp/discussion & while read ; do echo $NICKNAME:$REPLY >
/tmp/fifo; done
но тогда будут указанные проблемы с вводом текста.
При выходе надо корректно прибить tail, иначе будет по несколько
одинаковых сообщений при следующем запуске. Можно добавить
распознавание команд, оценивая $REPLY на соответствие определённым
словам (например, "/quit"). Но это всё уже в качестве домашнего
задания.
Reply to: