我正在尝试制作一些客户端-服务器界面。将其视为一对一聊天。
我想要实现的是两个水平视图。底部用于我的(服务器)输入,顶部用于客户端输出和我的输入。两者都已格式化(例如添加时间戳)。我正在使用 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 < 临时文件