当命令在 Ubuntu 终端中工作时,为什么 Dart 的“Process.start”不能执行 Ubuntu 命令?

cor*_*ath 5 ubuntu child-process dart dart-io

我有我想用 Dart 调用的命令。

sonar-runner如果我在普通的 Ubuntu 终端中运行它,该命令将完美运行。这是因为我PATH.profile的文件,使其成为一个全球性的命令。

但是,如果我写了一个简单的Process.start代码来触发同样的事情:

Process.run('sonar-runner', []).then((result) {
  stdout.write(result.stdout);
  stderr.write(result.stderr);
});
Run Code Online (Sandbox Code Playgroud)

我得到的回应是:

Uncaught Error: ProcessException: No such file or directory
  Command: sonar-runner 
Unhandled exception:
ProcessException: No such file or directory
  Command: sonar-runner 
Run Code Online (Sandbox Code Playgroud)

我猜这是一个 Ubuntu 配置的东西,因为我运行没有问题 ping localhost以同样的方式通过 Dart。

什么可能是错误的,以至于第三方应用程序在将其作为新进程运行时无法找到全局命令?

更新 - 找到解决方案

我找到了我的问题的解决方案,如下所述:

使用 Process.start 设置环境变量

对于我的具体情况,此代码有效:

Process.run("bash", ["-c", "sonar-runner"]).then((result) {
  stdout.write(result.stdout);
  stderr.write(result.stderr);
});
Run Code Online (Sandbox Code Playgroud)

小智 1

问题似乎是找不到“sonar-runner”,您是否尝试过完整路径?