Dart 使用Process.start设置环境变量

Dart 使用Process.start设置环境变量,dart,Dart,是否可以使用Process.start()设置环境变量?我已经尝试从中调整流程示例,但我收到了错误 Process.start(“导出我的密钥='abc123'”,[])。然后((进程){ var stdoutStream=新的StringInputStream(process.stdout); stdoutStream.onLine=()=>打印(stdoutStream.readLine()); process.stderr.onData=process.stderr.read; proce

是否可以使用Process.start()设置环境变量?我已经尝试从中调整流程示例,但我收到了错误

Process.start(“导出我的密钥='abc123'”,[])。然后((进程){
var stdoutStream=新的StringInputStream(process.stdout);
stdoutStream.onLine=()=>打印(stdoutStream.readLine());
process.stderr.onData=process.stderr.read;
process.onExit=(exitCode){
打印(“退出代码:$exitCode”);
};
错误:

Unhandled exception:
FutureUnhandledException: exception while executing Future
  ProcessException: No such file or directory
    Command: export my_key='abc123' 
original stack trace:
  null
#0      _FutureImpl._complete (bootstrap:844:11)
#1      _FutureImpl._complete (bootstrap:848:5)
#2      _FutureImpl._setException (bootstrap:873:14)
#3      _CompleterImpl.completeException (bootstrap:948:30)
#4      _ProcessImpl._start.<anonymous closure> (dart:io-patch:198:37)
#5      _Timer._createTimerHandler._handleTimeout (dart:io:6918:28)
#6      _Timer._createTimerHandler._handleTimeout (dart:io:6926:7)
#7      _Timer._createTimerHandler.<anonymous closure> (dart:io:6934:23)
#8      _ReceivePortImpl._handleMessage (dart:isolate-patch:37:92)
未处理的异常:
FutureUnhandledException:执行Future时发生异常
ProcessException:没有这样的文件或目录
命令:导出my_key='abc123'
原始堆栈跟踪:
无效的
#0未来实施完成(引导:844:11)
#1.未来实施完成(引导:848:5)
#2 FutureImpl.setException(引导:873:14)
#3_CompleterImpl.completeException(引导:948:30)
#4 _ProcessImpl._start.(dart:io补丁程序:198:37)
#5(计时器)(createTimerHandler)(dart:io:6918:28)
#6(计时器.)createTimerHandler.(指针:io:6926:7)
#7.计时器。创建计时器句柄。(dart:io:6934:23)
#8_ReceivePortImpl._handleMessage(dart:隔离补丁:37:92)

不幸的是,您不能。首先,这是因为
export
实际上是bash(或其他几个shell)的shell命令,而不是系统上的实际应用程序。Dart不会在shell中执行进程

一个选项是使用
bash-c“export my_key=123”
作为传递给Process.start的参数,但是这也是非常有限的,因为导出的变量仅在bash会话期间存在。也就是说,一旦生成的进程终止,您的变量就不再存在

如果要查看此操作,请在命令提示符下尝试以下操作:

bash -c 'export TEST="true";echo $TEST'
这将创建一个新的bash会话,导出变量,然后显示变量。一旦出现提示,请尝试运行:

echo $TEST
你应该看到一个空行(或者一个不同的值,如果你的系统已经存在的话)

也就是说,如果要在运行其他进程之前设置环境变量,请使用类设置环境变量,然后将其传递给进程。按如下方式启动:

导入'dart:io';
void main(){
var po=新的ProcessOptions();
var ev={'TEST':'True'};
po.environment=ev;
Process.start('bash',['-c','export'],po)。然后((Process){
var stdoutStream=新的StringInputStream(process.stdout);
stdoutStream.onLine=()=>打印(stdoutStream.readLine());
process.stderr.onData=process.stderr.read;
});
}

在不告诉我们错误是什么的情况下说“我收到了错误”是毫无意义的。我们从这里看不到您的屏幕,也看不到您的想法。错误已添加到帖子中。谢谢。感谢您的解释和替代解决方案。