我正在尝试从Julia运行shell命令,该命令需要将环境变量设置为某些特定值。我有两个问题:
如何设置Julia的
使用的环境变量
run(command, args...; wait::Bool = true)
命令?
如何在不进行内插的情况下将特殊符号$
传递给此过程?我想测试该变量是否可用于我的程序。
假设我想定义一个环境变量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
。
答案 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会话中运行的可执行文件使用它们。