朱莉娅使用环境变量运行外部程序:请勿插入$

时间:2019-08-07 12:41:00

标签: julia

我正在尝试从Julia运行shell命令,该命令需要将环境变量设置为某些特定值。我有两个问题:

  1. 如何设置Julia的
    使用的环境变量  run(command, args...; wait::Bool = true)命令?

  2. 如何在不进行内插的情况下将特殊符号$传递给此过程?我想测试该变量是否可用于我的程序。

到目前为止我做了什么:

假设我想定义一个环境变量FOO=bar,并使用shell命令echo $FOO检查它是否在shell中可以访问。

为了防止Julia插值$,我已经像在official documentation中解释的那样对其进行了引用,但是echo却在打印$PATH而不是其值。

所以对于FOO,我得到了以下输出结果

julia> run(`echo '$FOO'`)
$FOO
Process(`echo '$FOO'`, ProcessExited(0))

但是会期望像

julia> run(`echo '$FOO'`)

Process(`echo '$FOO'`, ProcessExited(0))

如果FOO未定义

julia> run(`echo '$FOO'`)
bar
Process(`echo '$FOO'`, ProcessExited(0))

如果该值设置为bar

2 个答案:

答案 0 :(得分:1)

签出Julia documentation on environment variables。您可以使用以下方法设置环境变量:

julia> ENV["FOO"] = "bar"
"bar"

,您可以使用以下方法检索环境变量的值:

julia> ENV["FOO"]
"bar"
julia> ENV["PATH"]
"really long string of my path"

如前所述,可以通过单引$命令的那部分来避免解释run。我不确定您在那儿找什么。

答案 1 :(得分:0)

不优雅,但是可以用:

julia> write("temp.sh", "echo foo=\$BAR");

julia> run(`bash temp.sh`)
foo=
Process(`bash temp.sh`, ProcessExited(0))

julia> ENV["BAR"] = "bar";

julia> run(`bash temp.sh`)
foo=bar
Process(`bash temp.sh`, ProcessExited(0))

我猜朱莉亚在运行命令之前将ENV的内容注入到外壳中。这就是我需要知道的全部内容,因为我将启动需要设置一些环境变量的其他可执行文件。因此,在ENV[]中设置它们时,您可以在该Julia会话中运行的可执行文件使用它们。