【问题标题】:How do you source a shell script with dart.io in the current process?在当前进程中如何使用 dart.io 获取 shell 脚本?
【发布时间】:2015-04-25 21:34:23
【问题描述】:

Process.run(和所有变体)抱怨使用“。”和“源”命令。是否有内置方法可以使用 run 方法执行此操作,或者我可以尝试调用一个特定的可执行文件来模拟 bash 的源命令?

【问题讨论】:

  • 我不知道 dart,但是在简要阅读文档之后,我很清楚 Process.run 在非 shell 上下文中直接调用该过程。如果你想source,你需要做的是调用shell解释器,例如,bash,所以你需要运行bash -c 'blah blah',或者把source和其他命令放在一个shebanged的可执行脚本中,然后运行它脚本。
  • source(又名.)命令在当前shell中运行一个脚本。由于 dart 不是 shell,因此该命令在这种情况下没有多大意义。你到底想完成什么?
  • @GordonDavisson 他可能只是想导出一些环境变量。
  • 我需要获取的脚本确实导出了一些环境变量,特别是向 $PATH 添加了一些新程序。我的目标是能够通过我的 Dart 应用程序以编程方式获取此脚本,以便我可以在添加到 $PATH 的新程序上调用 Process.run()。

标签: bash dart dart-io


【解决方案1】:

所有这些命令都有一个runInShell 参数。如果这不能解决它,请使用shell -c ". xxx"

如果你先Process.run('. somescript.sh, runInShell: true); 然后Process.run('someexecutable'); 你什么也得不到,因为当第一次调用结束时,创建的环境随之消失。 我假设你想要的是

Process.run('. somescript.sh && someexecutable', runInShell: true);

【讨论】:

  • 从文档中,runInShell 默认为 false - 因此,如果不将其设置为 true,则应将通过 Process.run() 设置的环境变量添加到我的应用程序正在运行的当前环境中,对吧?
  • 另外,您能否编辑您的答案以包括对 Process.run() 的调用作为示例?
  • @Crunchex:不,子进程(AIUI 是 Process.run 创建的——在其任何模式下)无法在父进程中设置环境变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2023-04-09
  • 2011-01-28
  • 2019-09-06
  • 1970-01-01
相关资源
最近更新 更多