朱莉娅:没有单引号的美元登录命令

时间:2014-10-09 19:53:38

标签: julia

我正在尝试从Julia运行以下命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/.julia/v0.3/Smile/deps/downloads

当我按原样运行时,它会尝试用局部变量替换$ LD_LIBRARY_PATH。 当我转义$时,它会在命令周围加上引号,这会使命令无效。

julia> cmd = `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tim/.julia/v0.3/Smile/deps/downloads`
ERROR: LD_LIBRARY_PATH not defined

julia> cmd = `export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/home/tim/.julia/v0.3/Smile/deps/downloads`
`export 'LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tim/.julia/v0.3/Smile/deps/downloads'`

我想以类似于:

的形式运行命令
run(`export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$newpath`)

如何正确处理美元符号?

谢谢

*注意:将命令直接粘贴到终端并运行它可以正常工作

1 个答案:

答案 0 :(得分:1)

在Julia中,反引号并不完全等同于在shell上运行相应的命令。您无法使用$插入环境变量(尽管$(get(ENV, "varname", "")应该与shell的行为相匹配),而export是内置的shell,而不是命令,所以我不认为你可以运行它。此外,即使反引号被淘汰,export也只会改变子shell的环境,而不是调用进程。

您应该可以将朱莉娅的LD_LIBRARY_PATH设置为:

ENV["LD_LIBRARY_PATH"] = "$(get(ENV, "LD_LIBRARY_PATH", "")):$newpath"

但如果可能的话,你应该避免这种情况。如果您的目的是ccall某个特定的图书馆,您可以直接将图书馆路径传递给ccall,如果您不知道,可以使用评论中指出的find_library全程前进。如果您需要设置LD_LIBRARY_PATH因为库需要加载其他库,我不确定是否有更好的方法,但请注意LD_LIBRARY_PATH是特定于平台的。您可能首先dlopen依赖库,但我还没有对其进行测试。