来自 bash 脚本的 Julia

Julia from bash script

我可以创建一个 Julia 实例并将其用于 bash 脚本中的 运行 多个 Julia 脚本吗?

#!/bin/bash
J=getjuliainstance()
J.run(temp.jl)
J.run(j1.jl)
J.run(j2.jl)
J.run(j3.jl)
J.exit()

我可以 运行 所有这些都来自 Julia 主脚本,但这不是本意。

这是为了规避 Julia 对第一个脚本的加载时间,以便 运行后续脚本的时间可以保持一致。

有什么方法可以生成单个进程并重新使用它来启动脚本?请仅来自 shell 脚本!

解决方案之一(允许使用 tail -f):

julia <pipe 2>&1 | tee submission.log > /dev/null &

您可以试试命名管道:

$ mkfifo pipe # create named pipe

$ sleep 10000 > pipe & # keep pipe alive
[1] 11521

$ julia -i <pipe & # make Julia read from pipe
[2] 11546

$ echo "1+2" >pipe

$ 3


$ echo "rand(10)" >pipe

$ 10-element Array{Float64,1}:
 0.938396
 0.690747
 0.615235
 0.298277
 0.780966
 0.775423
 0.197329
 0.136582
 0.302169
 0.607562


$

您可以使用 echo 向 Julia 发送任何命令。 如果你对 Julia 输出使用 stdout,那么当 Julia 在那里写一些东西到 return 来提示时,你必须按回车键。 通过写 echo "exit()" >pipe 来阻止 Julia。如果您想以这种方式执行文件,请使用 include 函数。

编辑:如果你这样 运行 Julia,你似乎甚至不必使用 -i

EDIT2:我没有注意到实际上您只想使用一个 bash 脚本(不是交互模式)。在这种情况下,使用命名管道应该更简单。