Как отправить сообщение как в netcat, так и в другой скрипт?

1290
Mars

Я пытаюсь сделать какой-нибудь интерфейс клиент-сервер. Думайте об этом как один на один чат.

Чего я хочу добиться, так это двух горизонтальных представлений. Низ для моего (серверного) ввода, верх для клиентского вывода и моего ввода. Оба отформатированы (например, добавлена ​​метка времени). Я делаю соединение с помощью Netcat. Мне удалось разделить экран, отформатировать и распечатать входящие данные. Чего мне не хватает, так это распечатки ввода в верхнем окне и отправки его клиенту. Я использую именованную трубу. Я начинаю все с временной голой команды screen -c screens. В дальнейшем все начнется с третьего скрипта с параметрами). Я использую 64-битный дистрибутив на основе Debian CrunchBang.

Может expectрешить проблему? Любая помощь будет оценена.

server.sh:

#!/bin/bash  pipe=/tmp/pipe trap "rm -f $pipe" EXIT  if [[ ! -p $pipe ]]; then mkfifo $pipe #chmod +x $pipe fi  nc localhost -lp 53656 >$pipe &  while true do read message  echo "$message" >$pipe clear done 

conv.sh:

#!/bin/bash # conversation window  clear pipe=/tmp/pipe  while true do if read line <$pipe; then if [[ "$line" == "quit" ]]; then break fi  NOW=$(date "+%H:%M") echo "($NOW) Client: $line" fi done 

настройки экрана:

startup_message off  split focus screen ./server.sh title "input"  focus top screen ./conv.sh title "conv"  focus bottom 

Окно выглядит:

Как отправить сообщение как в netcat, так и в другой скрипт?

1

1 ответ на вопрос

1
Stephanie

The easiest way would be via tee http://man7.org/linux/man-pages/man1/tee.1.html and a named pipe. http://man7.org/linux/man-pages/man1/mkfifo.1.html

Create a fifo

$ mkfifo temporaryfile

Insert the tee into the middle of the pipe outputting to that file

$ command | tee temporaryfile | othercommand &

Feed the contents of the fifo into your third command

$ thirdcommand < temporaryfile

Похожие вопросы