创建一个 fifo

创建一个 fifo

我正在尝试制作一些客户端-服务器界面。将其视为一对一聊天。

我想要实现的是两个水平视图。底部用于我的(服务器)输入,顶部用于客户端输出和我的输入。两者都已格式化(例如添加时间戳)。我正在使用 netcat 建立连接。我设法分屏、格式化和打印传入数据。我缺少的是在顶部窗口中打印我的输入并将其发送到客户端。我正在使用命名管道。我使用临时裸命令启动一切screen -c screens。将来,一切都将从带有参数的第三个脚本开始)。我正在运行基于 64 位 debian 的 CrunchBang 发行版。

也许expect可以解决这个问题?任何帮助都将不胜感激。

服务器.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

最简单的方法是通过 teehttp://man7.org/linux/man-pages/man1/tee.1.html和一个命名管道。http://man7.org/linux/man-pages/man1/mkfifo.1.html

创建一个 fifo

$ mkfifo 临时文件

将三通插入输出到该文件的管道中间

$ 命令 | tee 临时文件 | 其他命令 &

将 fifo 的内容输入到第三个命令中

$ thirdcommand < 临时文件

相关内容