所以我在脚本中使用coproc命令运行java程序并向其输入输入,如下所示:
#!/bin/bash
echo Script started.
coproc java -jar MultiThreadedFileProcessor.jar
echo start >&${COPROC[1]}
echo Script terminated.
我希望能够编写另一个可以向该程序传递更多输入的脚本(例如,一个命令将告诉程序运行终止例程)。
有没有办法可以从另一个脚本访问协同进程的stdin?我目前对终止脚本的尝试如下:
#!/bin/bash
echo Script started.
echo terminate >&${COPROC[1]}
echo close >&${COPROC[1]}
echo Script terminated.
这给了我一个ambiguous redirect
错误,但我猜测是因为COPROC [1]只在创建coproc的脚本中定义。
如果有的话,我是否可以编写一个脚本来完成将行传递给java程序的目标?
答案 0 :(得分:0)
COPROC是第一个脚本的本地数组-您将永远无法从另一个脚本访问该数组。
在Linux上,您可以访问/ proc / $ pid / fd / $ n,其中$ pid是第一个脚本的pid,而$ n是存储在$ {COPROC [1]}中的fd。两者都必须在某个地方(一个pid文件,同样是一个“ fd文件”)进行通信,但是在那种情况下,最好不要创建一个命名管道(integer overflow
),并使用它而不是在第一个中创建coproc地点。这样的代码(未经测试):
脚本1:
mkfifo
脚本2:
mkfifo fifoname
exec 5>fifoname
java <fifoname &
echo close >&5
exec 5>fifoname
echo terminate >&5
echo close >&5
命令应该做什么? Java程序将会看到
close
对Java程序有意义吗?