使用 NSTask 执行离子构建命令 - 无法访问启动路径
Posted
技术标签:
【中文标题】使用 NSTask 执行离子构建命令 - 无法访问启动路径【英文标题】:Using NSTask to execute ionic build commands - launch path not accessible 【发布时间】:2015-08-03 05:08:55 【问题描述】:我正在使用具有命令行界面的 Ionic。我想创建一个有助于执行某些命令的小型 Mac 应用程序。
在终端我cd Users/me/Desktop/Repos/ionic-project/myApp
改变后,我会例如ionic run
NSTask *task = [[NSTask alloc]init];
task.launchPath = @"/bin/bash";
task.currentDirectoryPath = @"cd Users/me/Desktop/Repos/ionic-tryouts/myApp";
task.arguments = @[@"ionic run"];
[task launch];
但这给了我“工作目录不存在”。 我已经在这里阅读了很多关于 SO 的主题。我的错误是什么?
编辑:
感谢克里斯蒂克的详细回答。我现在有这个代码:
NSTask *task = [[NSTask alloc]init];
task.launchPath = @"/usr/local/bin/ionic";
task.currentDirectoryPath = @"/Users/me/ionic-tryouts/myApp";
task.arguments = @[@"run"];
[task launch];
现在我收到以下错误:env: node: No such file or directory
。我想这来自一个问题,没有找到 node.js(离子构建在节点之上)。我发现this 问题 - 缺少正确名称的符号链接可能是原因。但是为节点设置符号链接并没有帮助。有什么想法吗?
编辑2: 我给了克里斯蒂克正确的答案,尽管我最终无法让它发挥作用。我还在调查。可能是节点安装错误。
编辑3: 我看到一些帖子提到它可能会更好,如果 node 由 homebrew 重新安装,因为 homebrew 在没有 sudo 的情况下安装它。简短评论:没有帮助
【问题讨论】:
【参考方案1】:如果您想使用bash
来启动ionic
,您需要执行的等效命令是/bin/bash -c ionic run
,因此您需要更改以下内容:
-
从
currentDirectoryPath
中删除前导cd
(这可能是从终端复制+粘贴的拼写错误)并添加前导/
以获得绝对路径
将arguments
更改为@[@"-c",@"ionic",@"run"]
,因为 NSTask 的每个参数都应该代表数组中的一项。
如果您在使用/usr/bin/bash
时遇到一些其他工具未找到的问题,您可以尝试使用/bin/sh
。
更新正如Aditya Vaidyam 指出的here,您可能还需要设置环境变量(尤其是PATH
),以模拟与终端相同的条件。如果你想知道设置了哪些环境变量,只需运行env
command。
【讨论】:
感谢您的回答,但如上所述,我仍然遇到问题。我会设置一个赏金;-) 感谢您的关注 :-) 但即使只有@[@"run"]
作为参数,它也会给出env: node: No such file or directory
。我想这与离子安装有关
您找到解决方案了吗?我在使用 NSTask 运行 Gulp 时遇到了同样的问题。
@Cristik 感谢您的回复;我确信论点通过了;看看我是否在终端上运行特定命令,例如'class-dump -H -o 在 Cristik 建议的基础上,您需要将 node.js 的位置添加到 environment variables(即 PATH),除非它已经在 /usr/bin/ 左右。
【讨论】:
以上是关于使用 NSTask 执行离子构建命令 - 无法访问启动路径的主要内容,如果未能解决你的问题,请参考以下文章