Windows 在 Rebol 或 Red 中的多个“调用”之间设置持久环境变量

Setting persistent environment variables between multiple `call`s in Rebol or Red on Windows

是否可以设置在多个 call 之间持续存在的环境变量?

当它是一个 call 的一部分时没问题,例如:

>> call/wait/shell {set a=1 & echo a is %a%}
a is 1

但我需要让它在多个调用之间工作,这不是:

>> call/wait/shell {set b=2}
== 0
>> call/wait/shell {echo b is %b%}
b is %b%
== 0

无论使用何种语言:在简单的机械 API 级别——从子进程——不可能在父进程中设置环境变量:

可以使用SET-ENV设置调用进程中的变量,CALL创建的子进程会继承这些变量。在 Linux 上的 R3-Alpha 中:

>> set-env "FOO" "10"

>> call "echo $FOO"
10
== none

Windows 为红色:

>> set-env "FOO" "10"

>> call/shell/output "echo %FOO%" out: ""
== 0

>> out
== "10^/"

如果您希望环境变量在子进程调用之间持续存在,您可以在子进程 returns 向父进程发送信息的地方设置一些协议,让它为下一个 CALL 进行 SET-ENV 修改继承。