1

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

Чего я хочу добиться, так это двух горизонтальных представлений. Низ для моего (серверного) ввода, верх для клиентского вывода и моего ввода. Оба отформатированы (например, добавлена метка времени). Я делаю соединение с помощью 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 ответ1

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 <временный файл

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .