【问题标题】:A bash script written around the nc command. How do I prepend text before each line?围绕 nc 命令编写的 bash 脚本。如何在每行之前添加文本?
【发布时间】:2015-03-02 07:11:52
【问题描述】:

我正在以一种不寻常的方式使用 nc 命令。如果两个用户几乎同时运行它们,我有两个启动聊天会话的 bash 脚本。这些脚本是围绕 nc 命令构建的。我希望文本流显示每个回车后附加的值(当用户按下回车键时)。

以下是脚本以交互方式和协作方式工作的方式: 在工作站 1 上,我调用这个:nc -l 44444

在工作站 2 上,其他人调用:nc x.x.x.x 44444 (其中 x.x.x.x 是工作站 1 的 IP 地址)

我可以和其他人聊天。无论用户类型如何,都会镜像到另一个终端。我的问题:如何编写 bash 脚本来附加文本?我在变量中有我想要的文本(例如,“说 user1”)。

我希望它自动显示(无需用户手动输入)。

如果工作站 1 上的用户(IP 地址为 x.x.x.x)在聊天会话期间键入“这只是一个测试”并按 Enter,我希望这是结果:

这只是用户1的测试。

如果工作站 2 上的用户(IP 地址为 y.y.y.y)在聊天会话期间键入“哦,好的”并按 Enter,我希望得到以下结果:

哦,好的,用户2。

用户名在脚本的变量中。我可以毫无问题地构造字符串。我只是不知道如何让这个变量字符串自动显示。只有在脚本运行时,每次按下回车时,是否可以显示一些文本?运行 bash 脚本时会镜像文本流。我不确定如何做到这一点。

【问题讨论】:

  • rups 帮助了我。这些行是完美的: sed -u "s/$/said user2 /" | nc xxx.xxx.xxx.xxx 44444 sed -u "s/$/ 表示user1/" | nc -l 44444
  • 嗨@Propulsion:如果这个或任何答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

标签: linux bash shell stream inputstream


【解决方案1】:

试试这个:

sed -u "s/$/said user2 /" | nc xxx.xxx.xxx.xxx 44444
sed -u "s/$/ said user1 /" | nc -l 44444

【讨论】:

    【解决方案2】:

    nc 以交互方式运行时(即作为前台作业运行),它的标准输入连接到终端,Bash 也不能只向它发送输入。恕我直言,最简单的方法是(对于每一行)读取 Bash 中的输入并在其中添加后缀,然后将其通过管道传递给 nc 的新调用。

    请记住,nc 在从标准输入读取时会忽略文件结尾 (EOF),请参阅 nc(1)-q 选项告诉nc 在客户端EOF 之后关闭连接,您可以在服务器端循环运行nc -l

    【讨论】:

    • netcat和nc一样吗? EOF 是文件结尾吗?我不打算以交互方式运行 nc 。它将使用 bash 脚本启动。聊天会话将是交互式的。聊天会话发生在脚本启动之后但也终止之前。
    • 是的,我将编辑我的答案以澄清。 “交互式”是指nc 是前台工作并从终端接收输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多