使用NSTask来执行离子build立命令 – 启动path不可访问
我正在与具有命令行界面的Ionic合作。 我想创build一个小的Mac应用程序,帮助执行某些命令。
在terminal我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];
但是这给了我“工作目录不存在”。 我在这里已经阅读了相当多的线索。 我的错误是什么?
编辑:
感谢Christik的详细解答。 我现在有这样的代码:
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没有find(离子build立在节点的顶部)。 我发现这个问题 – 缺less正确名称的符号链接可能是原因。 但是设置节点的符号链接没有帮助。 有任何想法吗?
编辑2:我给了Christik正确的答案,即使我不能最终得到它的工作。 我还在调查。 也许这是节点安装这是错误的。
编辑3:我看到一些职位,提到它可能会更好,如果节点重新安装自制,因为自制安装它没有sudo。 简短的评论:没有帮助
如果你想使用bash
来启动ionic
,你需要执行的等效命令是/bin/bash -c ionic run
,因此你需要改变以下内容:
- 从
currentDirectoryPath
删除前导cd
(这可能是从terminal拷贝+粘贴错误),并添加一个前导/
有一个绝对path - 将
arguments
更改为@[@"-c",@"ionic",@"run"]
,因为NSTask的每个参数都应该表示数组的一个项目。
如果由于找不到其他工具而遇到/usr/bin/bash
问题,可以尝试使用/bin/sh
。
更新由于Aditya Vaidyam在这里指出,您可能还需要设置环境variables(尤其是PATH
之一),以模拟与terminal相同的条件。 如果你想知道哪些环境variables已经设置,只需运行env
命令即可。
在Cristikbuild议的基础之上,你需要添加到环境variables (即PATH),node.js的位置,除非它已经在/ usr / bin /中。