将输入从代码或终端重定向到正在运行的代码或终端?

将输入从代码或终端重定向到正在运行的代码或终端?

目前,我正在使用一个需要通过终端连续输入的软件脚本。该脚本通过接收路径输入并评估路径中的文件。

目标:是否可以通过传递输入来运行需要输入的脚本另一个终端或脚本。

评估软件在准备处理之前会加载大量数据,这就是为什么我宁愿让软件保持运行,并时不时地传递输入。而不是启动软件并加载所需的所有数据(这需要时间)。

我可以说我曾尝试过终端找到:
$ /dev/pts/19
然后通过其他终端运行: $ <command> <myinput> > /dev/pts/19
其中命令被替换为“echo / print”
但是,它只是在另一个终端上打印,并不作为软件的输入。

答案1

创建命名管道:

mkfifo pipe

确保它不会关闭(见这个答案):

exec 3<>pipe

从管道提供你的脚本:

<pipe your_script.sh
# or if you want to see incoming data
<pipe tee >(your_script.sh)

然后从另一个终端使用echoprintf或者其他任何方式:

echo "/some/path/or/another/input" > pipe

或者

cat large_input.txt > pipe

或者

script_that_generates_input.sh > pipe

但要小心竞争条件!不要同时从两个或多个源向管道提供数据;在运行下一个命令之前,请始终等待当前提供命令退出。请注意,如果一个源传递大量数据,则它可能会在中途被保留,直到接收方处理完数据。在任何提供命令被搁置之前,使用 put mbuffer(带有适合您使用情况的参数)your_script.sh创建一个可以存储更多传入数据的缓冲区。

相关内容