通过bash中的文件进行通信

时间:2015-10-06 17:12:11

标签: bash interprocess

我正在进行bash脚本编写,并希望使用写入文件在两个进程之间建立通信。该计划的演练将是:

  1. 进程1打开文件" file.txt"并在终端
  2. 中写入用户指定的一些输入
  3. 进程2从另一端打开同一个文件,并不断读取它以进行更新。
  4. 如果进程2找到更新,则会向用户显示输出。
  5. 目前我很难确定文件何时更新,并将文件的更新部分(在本例中为最后一行)存储在变量中。

    任何帮助将不胜感激!

    P.S。假设两个进程脚本位于同一位置并且正在不同的终端上运行。

    更新

    正如一些人建议使用命名管道,文本文件是管道。我在共享文件系统的集群上运行进程,进程可以在任意两个节点上运行。因此,进程1发送的命令被写入文件,并由进程2在不同的节点上读取。另一方面,命名管道要求两个进程都本地存储。

2 个答案:

答案 0 :(得分:0)

如上所述,可能最简单的方法是创建一个命名管道,例如,

x <- rgamma(500,shape=q$par[1],scale=q$par[2])
hist(newdata$faminc, prob = TRUE)
curve(dgamma(x, shape=q$par[1], scale=q$par[2]), add=TRUE, col='blue') 

请参阅,例如,此短tutorial

在松散的术语中,创建了管道后,第一个进程就像是一个“普通”文件一样写入它。然后,第二个进程执行的任何读取都会阻塞,直到有新的“内容”可用。

答案 1 :(得分:0)

这样的事情:

<强>过程1

#!/bin/bash
while :; do
    seq 1 100 >> sharedFile.txt
    sleep 3
done

<强>过程2

tail -f sharedFile.txt | awk '/^53/{print "Saw 53"}'

或者如果process2需要在看到某些内容时运行某些命令:

tail -f sharedFile.txt | awk '/^53/{system("beep")}'