bash:将数据传递给exec'd命令

时间:2016-09-15 19:57:25

标签: linux bash shell

我有一个程序sink.py,我希望在bash脚本(run.sh)中运行。 sink.py需要来自stdin的数据来完成它的工作。

我想将其他程序source.py的数据提供给sink.py。以下管道工作正常:

python source.py | python sink.py

但是,我期待exec sink.py,以便接管shell。我想这样做,因为我从流程管理器(supervisord)启动这个bash脚本,sink.py具有所有信号处理代码。理想情况下,我可以这样做:

python source.py | exec python sink.py

但这似乎不起作用 - ps表明run.sh继续作为sink.py的父级运行。

我尝试使用像这样的流程替换:

exec python sink.py < <(python source.py)

这几乎是完美的,除了bash脚本似乎变成了一个“僵尸”,这可能不是一件好事:

 PID TTY      STAT   TIME COMMAND
1042 pts/7    S      0:00 python sink.py
1046 pts/7    Z      0:00 [run.sh] <defunct>

另一个想法是将source.py的输出保存到临时文件中,然后将文件导入sink.py。这几乎可行,但我无法在exec sink.py之后删除临时文件。

有没有什么好办法可以做到这一点?

0 个答案:

没有答案