gpt4 book ai didi

Julia:不带单引号的美元符号命令

转载 作者:行者123 更新时间:2023-12-05 06:45:06 25 4
gpt4 key购买 nike

我正在尝试从 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`)

如何正确处理美元符号?

谢谢

*注意:将命令直接粘贴到终端并运行它确实有效

最佳答案

在 Julia 中,反引号并不完全等同于在 shell 中运行相应的命令。您不能使用 $ 插入环境变量(虽然 $(get(ENV, "varname", "") 应该匹配 shell 的行为),并且 export 是内置的 shell,不是命令,所以我不认为你可以运行它。另外,即使反引号脱壳,export 也只会改变子 shell 的环境,而不是调用过程。

您应该能够将 Julia 中的 LD_LIBRARY_PATH 设置为:

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

但是你应该尽可能避免这种情况。如果您打算 ccall 一个特定的库,您可以将库路径直接传递给 ccall,也许使用 find_library,如您在评论中指出的那样如果你不知道完整的路径前进。如果因为库需要加载其他库而需要设置LD_LIBRARY_PATH,我不确定是否有更好的方法,但请注意LD_LIBRARY_PATH是平台特定的。您也许可以先dlopen 依赖库,但我还没有测试过。

关于Julia:不带单引号的美元符号命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26286873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com