ncat(来自 nmap 社区)有一个简洁的默认操作,可以将任何输入复制到所有连接的客户端。例如:
在终端 1 上启动服务器:
% mkfifo messages
% exec 8<>messages # hold the fifo open
% ncat -l 5555 -k --send-only < messages
Run Code Online (Sandbox Code Playgroud)
启动客户端侦听终端 2 和 3:
% nc localhost 5555
Run Code Online (Sandbox Code Playgroud)
向终端 4 上的 fifo 输出一些内容,并观察所有连接的客户端(终端 2 和 3)上出现的相同消息:
% printf 'Hello, clients.\n' > messages
Run Code Online (Sandbox Code Playgroud)
socat 是否可以使用相同的模式?
更新:菲利普的解决方案截图:
我想保存然后恢复stty脚本中的当前设置,该脚本也很消耗stdin,但stty -g正在抱怨它:
stty:“标准输入”:设备的 ioctl 不合适
我尝试关闭stdin文件描述符并stty在具有覆盖 FD 的子 shell 中调用。我不知道如何分离stdin,stty -g希望得到帮助或建议。
请注意,我对 POSIX 兼容性特别感兴趣。请不要使用 Bash/Zsh 主义。
重现问题的最小脚本:
#!/usr/bin/env sh
# Save this so we can restore it later:
saved_tty_settings=$(stty -g)
printf 'stty settings: "%s"\n' "$saved_tty_settings"
# ...Script contents here that do something with stdin.
# Restore settings later
# (not working because the variable above is empty):
stty "$saved_tty_settings"
Run Code Online (Sandbox Code Playgroud)
运行print 'foo\nbar\n' | ./sttytest查看错误。