我可以创建一个 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 发送任何命令。
如果您使用 stdout 进行 Julia 输出,那么当 Julia 在那里写入内容时您必须按 Enter 键才能返回提示。
通过编写 echo "exit()">pipe
来停止 Julia。如果您想以这种方式执行文件,请使用 include
函数。
编辑:如果您以这种方式运行 Julia,似乎您甚至不必使用 -i
。
EDIT2:我没有注意到实际上您只想使用一个 bash 脚本(而不是交互模式)。在这种情况下,使用命名管道应该更简单。
关于bash - bash 脚本中的 Julia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48476159/