Как отправить сообщение как в netcat, так и в другой скрипт?
Я пытаюсь сделать какой-нибудь интерфейс клиент-сервер. Думайте об этом как один на один чат.
Чего я хочу добиться, так это двух горизонтальных представлений. Низ для моего (серверного) ввода, верх для клиентского вывода и моего ввода. Оба отформатированы (например, добавлена метка времени). Я делаю соединение с помощью 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
Окно выглядит:
1 ответ
Самый простой способ - через http://man7.org/linux/man-pages/man1/tee.1.html и именованный канал. http://man7.org/linux/man-pages/man1/mkfifo.1.html
Создать FIFO
$ mkfifo временный файл
Вставьте тройник в середину трубы, выводящей в этот файл
$ command | временный файл | другие команды &
Подайте содержимое fifo в свою третью команду
$ thirdcommand <временный файл