首页 > 解决方案 > Swift CLI - $PATH 不完整

问题描述

我正在将 CLI 工具构建为 Swift 包。部分流程需要我调用一些流程(例如gsutil)。当我尝试调用这些时,我总是以 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'

一些进一步的分析表明,诸如pwdor之类的常规命令可以which正常工作。如下图所示,如果我尝试echo $PATH,我会得到一个不完整的结果。

调试$PATH直接运行项目时 的值

/Applications/Xcode-beta.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin\n

$PATH与我的实际变量完全不同:

echo $PATH
/Users/skwiggs/google-cloud-sdk/bin:/Users/skwiggs/.npm-global/bin:/Users/skwiggs/.rbenv/bin:/Users/skwiggs/.rbenv/shims:/Users/skwiggs/google-cloud-sdk/bin:/Users/skwiggs/.npm-global/bin:/Users/skwiggs/.rbenv/bin:/Users/skwiggs/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands

在调试 CLI 工具时,如何确保正确设置了我的环境变量?

标签: swiftcommand-line-interface

解决方案


直接从 shell 运行该工具会将预期$PATH值传递给它,因此此问题仅在调试时发生。

如果要使用正确的$PATH值调试程序,可以在活动方案中添加环境变量。该变量仅在调试时使用,因此覆盖它是安全的(从外壳调用您的产品时它将被忽略)。

  1. 打开终端
  2. echo $PATH
  3. 复制输出

然后,打开 XCode

方案 -> 编辑方案 -> 运行 -> 环境变量 -> 添加。

名称 PATH <paste the value from terminal>

方案环境变量

构建并运行,您现在可以像从 shell 调用您的项目一样进行调试。

(请记住,对于需要此行为的每个新项目,您都必须这样做,并且对您的任何更改$PATH都必须改装到您的项目中)


推荐阅读