我正在尝试从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`)
如何正确处理美元符号?
谢谢
*注意:将命令直接粘贴到终端并运行它可以正常工作
答案 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
依赖库,但我还没有对其进行测试。