来自 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 脚本(不是交互模式)。在这种情况下,使用命名管道应该更简单。
我可以创建一个 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 脚本(不是交互模式)。在这种情况下,使用命名管道应该更简单。