通过shell脚本保持fifo打开

通过shell脚本保持fifo打开

我尝试通过脚本启动可以交互的进程。

编辑:一般问题是通过 php 启动这些进程。进程启动后,另一个 php 脚本(或再次运行的相同脚本)将读取进程的输出。然后第三个 php 脚本将写入进程的输入。为了模拟通过 php 启动,我确实使用了 bash 脚本,因为它有同样的问题。

为此,我创建了一个 out-file,进程可以向其中写入数据,以及一个 fifo,进程可以从中读取数据。例如,我的进程是 passwd。

当我像这样尝试时:

mkfifo fifo.my
touch out.my
passwd > out.my 2> out.my < fifo.my & echo $!

它不起作用。根据 这篇文章EOF 导致 passwd 进程终止。

按照上述帖子的解决方案,我尝试了

mkfifo fifo.my
touch out.my
cat > fifo.my &
passwd > out.my 2> out.my < fifo.my & echo $!

它创建了两个作业,我可以用它来观察

jobs

我的目标是通过 bash 脚本启动它

#!/bin/bash
cat > fifo.my & PID=$!
echo $PID

当我调用脚本时,会创建一个 PID = $PID 的进程,但不会创建一个作业。而且,更重要的是,

passwd > out.my 2> out.my < fifo.my & echo $!

不起作用,因为 EOF 再次通过管道发送。

我怎样才能通过脚本保持管道畅通?

答案1

我建议为此使用 Tcl 的“expect”库,特别是对于脚本 passwd;它分配一个伪终端,可以消除大多数意外,并让您根据结果采取行动。

相关内容