我正在尝试从 Julia 运行 shell 命令,该命令需要将环境变量设置为某个特定值。我有两个问题:
如何设置 Julia
run(command, args...; wait::Bool = true)命令使用的环境变量?
如何在$不插入的情况下将特殊符号传递给这个过程?我想测试该变量是否可用于我的程序。
假设我想定义一个环境变量FOO=bar并检查它是否可以在 shell 中使用 shell command 访问echo $FOO。
为了防止 Julia 插值,$我已经像官方文档中解释的那样引用了它,但是 echo 正在打印$PATH而不是它的值。
所以FOO我得到了以下输出
julia> run(`echo '$FOO'`)
$FOO
Process(`echo '$FOO'`, ProcessExited(0))
Run Code Online (Sandbox Code Playgroud)
但会期待类似的东西
julia> run(`echo '$FOO'`)
Process(`echo '$FOO'`, ProcessExited(0))
Run Code Online (Sandbox Code Playgroud)
如果FOO未定义或
julia> run(`echo '$FOO'`)
bar
Process(`echo '$FOO'`, ProcessExited(0))
Run Code Online (Sandbox Code Playgroud)
如果该值设置为bar.
通过引用调用从 Julia 调用 C 函数的正确方法是什么?
我正在尝试使用ccallfrom Julia调用 C 函数,该函数将其输出作为指针。
所以 C 函数应该做这样的事情:
void plusOne(int* i){
printf("C: i = %i\n", i[0]);
i[0] = i[0]+1;
printf("C: i = %i\n", i[0]);
}
Run Code Online (Sandbox Code Playgroud)
使用gcc -shared -fPIC plusOne.c -o plusOne.dll(或.so在 Linux 上)编译它并在 Julia 中运行:
julia> i = Int32(42)
42
julia> ccall((:plusOne, "plusOne.dll"), Cvoid, (Ref{Cint},),i)
C: i = 42
C: i = 43
julia> println("Julia: i = $i")
Julia: i = 42
Run Code Online (Sandbox Code Playgroud)
使用 Julia 的此类 C 函数的正确方法是什么?Julia 文档有ccall( …