[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: