bash – 响应“写”消息

前端之家收集整理的这篇文章主要介绍了bash – 响应“写”消息前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
想知道是否有人知道捕获和识别到终端的传入写命令的方法.我已经尝试使用脚本-f然后使用tail -f跟随while循环的输出但是因为我跟踪的终端没有启动写​​入它不会输出.不幸的是我没有root权限,也无法使用pts或screendump,想知道是否有人知道实现这一目的的方法

例:

Terminal 1 $echo hello | write Terminal 2

Terminal 2 $
Message from Terminal 1 on pts/0 at 23:48 ...
hello
EOF

*Cause a trigger from which I can send a return message
我想不出任何明显的方法来做到这一点.这就是为什么……

你的shell接收来自的输入,并将其输出发送到某个终端
设备:

+-----------+
   |           |
   |   bash    |
   |           |
   +-----------+
         ^ |
         | |
         | v
      +----------------------+
      | some terminal device |
      +----------------------+

当写入写入终端时,它将数据直接发送到同一终端设备.它不会靠近你的shell:

+-----------+     +-----------+
   |           |     |           |
   |   bash    |     |   write   |
   |           |     |           |
   +-----------+     +-----------+
         ^ |             |
         | |             |
         | v             v
      +----------------------+
      | some terminal device |
      +----------------------+

因此,为了使您能够捕获通过写入发送的内容,您需要终端设备本身提供的一些钩子,我认为没有任何东西可以用来执行此操作.

那么脚本如何工作,为什么它不捕获写输出

脚本也无法挂入终端设备.它真的想要在你的shell和你的终端之间插入它自己,但没有一个好方法直接这样做.

因此,它创建了一个新的终端设备(一个伪终端,也称为“pty”)并在其中运行一个新的shell.一个pty由两个方面组成:“master”,它只是一个字节流,和一个“slave”,看起来就像任何其他交互式终端设备.

新shell附加到从属端,脚本控制主端 – 这意味着它可以将字节流保存到文件,以及在新shell和原始终端之间转发它们:

+-----------+
   |           |
   |   bash    |
   |           |
   +-----------+
         ^ |
         | |
         | v
+-----------------+  <=== slave side of pty -- presents the interface of
| pseudo-terminal |                                an interactive terminal
+-----------------+  <=== master side of pty -- just a stream of bytes
         ^ |                      
         | v     
   +-----------+
   |           |
   |  script   |
   |           |
   +-----------+
         ^ |
         | |
         | v
      +----------------------+
      | some terminal device |
      +----------------------+

现在您可以看到对原始终端设备的写入会绕过所有内容,就像上面的简单情况一样:

+-----------+
   |           |
   |   bash    |
   |           |
   +-----------+
         ^ |
         | |
         | v
+-----------------+  <=== slave side of pty -- presents the interface of
| pseudo-terminal |                                an interactive terminal
+-----------------+  <=== master side of pty -- just a stream of bytes
         ^ |                      
         | v     
   +-----------+     +-----------+
   |           |     |           |
   |  script   |     |   write   |
   |           |     |           |
   +-----------+     +-----------+
         ^ |             |
         | |             |
         | v             v
      +----------------------+
      | some terminal device |
      +----------------------+

如果您在此处将数据写入新终端的从属端,您将看到输出显示,因为它将出现在主端的数据流中,该脚本可以看到.您可以使用shell脚本中的tty命令找到新pty的名称.

不幸的是,这对写入没有帮助,因为您可能无法写入它:您的登录会话与原始终端相关联,而不是新终端,并且写入可能会抱怨您未登录但是如果你这样的话echo hello> / dev / pts / NNN,你会看到它确实出现在脚本输出中.

猜你在找的Bash相关文章