有没有办法让bash脚本处理使用write命令发送给它的消息

时间:2016-06-22 13:41:23

标签: linux bash debian

有没有办法让bash脚本处理使用“write”命令发送给它的消息?例如,如果用户想要在我的脚本中激活一个功能,我是否可以使用它来使用write命令向脚本发送命令?

我想到的一种可能的方法是为屏幕会话配置日志记录,然后让bash脚本解析文本,但我不确定是否会有更简单或更有效的方法来解决这个问题

编辑:我正在考虑作为替代解决方案,我可以使用命名管道。我担心如果tmp分区完全填满它会破坏(不确定这是否会影响写入?)。我将在共享的盒子上运行这个脚本,并且每隔一段时间就会有人完全填满/ tmp分区,然后就这样离开,直到人们开始抱怨

1 个答案:

答案 0 :(得分:0)

嗯,你正试图真正规避一个糟糕的unix命令来问它没有指定的东西。从手册页(强调我的):

  

写入实用程序允许您通过复制与其他用户进行通信        从您的终端到他们的线路

这意味着写入旨在直接在终端上复制行。一旦你说,我将使用屏幕转储终端输出,然后解析转储文件,你松开了写入的简单性(并且还需要磁盘空间,存在从顺序文件中删除旧行的问题)

更糟糕的是,由于你的脚本独立存在,它可以(应该?)是一个附加到无终端的守护进程脚本

因此,如果我正确理解了您的问题,您的要求是:

  • 执行某些任务并且应该能够响应异步请求的脚本 - 常用用法是命名管道或网络或unix域套接字,不常见的是专用文件夹中的文件,带有可选信号以立即处理,添加行由于访问问题的同步,
  • 可能会导致顺序文件不常见
  • 简单且欢乐的方式,供用户传递请求。好的write很适合那部分,但很难接口恕我直言

如果您不想通过使用标准工具在该部分上浪费时间,我会推荐邮件系统。将邮件地址别名为将使用邮件消息作为输入调用的程序是微不足道的。但我不确定这是否值得,因为用户可以直接使用请求作为输入或命令行参数调用该程序。

因此,客户端部分可能只是一个程序:

  • 在专用文件夹中创建临时文件(mkstemp是C或C ++中的朋友,或者是shell中的mktemp - 但要注意竞争条件)
  • 将请求写入该文件
  • optionaly向pid发送信号 - 前提是脚本在启动时将自己的PID写入专用文件