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 修改继承。
是否可以设置在多个 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 修改继承。