Swift CLI - $PATH 不完整
Swift CLI - $PATH is incomplete
我正在构建一个 CLI 工具作为 Swift 包。部分流程需要我调用一些流程(比如gsutil
)。当我尝试调用它们时,我总是以
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'
一些进一步的分析显示 pwd
或 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 工具时正确设置环境变量?
如果您使用 Swift,您可以直接使用
访问您的环境变量
guard let path = ProcessInfo.processInfo.environment["PATH"] else {
return
}
// ...
运行直接从 shell 使用该工具将传递给它预期的 $PATH
值,因此此问题仅在调试时发生。
如果你想用正确的 $PATH
值调试你的程序,你可以在活动方案中添加一个环境变量。该变量仅在调试时使用,因此覆盖它是安全的(当从 shell 调用您的产品时它将被忽略)。
- 打开一个终端
- 运行
echo $PATH
- 复制输出
然后,打开XCode
方案 -> 编辑方案 -> 运行 -> 环境变量 -> 添加。
名称 PATH
值 <paste the value from terminal>
Build & 运行,您现在可以像从 shell.
调用项目一样进行调试
(请记住,您必须为每个需要此行为的新项目执行此操作,并且对您的 $PATH
所做的任何更改都必须对您的项目进行改造)
我正在构建一个 CLI 工具作为 Swift 包。部分流程需要我调用一些流程(比如gsutil
)。当我尝试调用它们时,我总是以
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'
一些进一步的分析显示 pwd
或 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 工具时正确设置环境变量?
如果您使用 Swift,您可以直接使用
访问您的环境变量guard let path = ProcessInfo.processInfo.environment["PATH"] else {
return
}
// ...
运行直接从 shell 使用该工具将传递给它预期的 $PATH
值,因此此问题仅在调试时发生。
如果你想用正确的 $PATH
值调试你的程序,你可以在活动方案中添加一个环境变量。该变量仅在调试时使用,因此覆盖它是安全的(当从 shell 调用您的产品时它将被忽略)。
- 打开一个终端
- 运行
echo $PATH
- 复制输出
然后,打开XCode
方案 -> 编辑方案 -> 运行 -> 环境变量 -> 添加。
名称 PATH
值 <paste the value from terminal>
Build & 运行,您现在可以像从 shell.
调用项目一样进行调试(请记住,您必须为每个需要此行为的新项目执行此操作,并且对您的 $PATH
所做的任何更改都必须对您的项目进行改造)