使用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 ,因此你需要改变以下内容:

  1. currentDirectoryPath删除前导cd (这可能是从terminal拷贝+粘贴错误),并添加一个前导/有一个绝对path
  2. arguments更改为@[@"-c",@"ionic",@"run"] ,因为NSTask的每个参数都应该表示数组的一个项目。

如果由于找不到其他工具而遇到/usr/bin/bash问题,可以尝试使用/bin/sh

更新由于Aditya Vaidyam在这里指出,您可能还需要设置环境variables(尤其是PATH之一),以模拟与terminal相同的条件。 如果你想知道哪些环境variables已经设置,只需运行env命令即可。

在Cristikbuild议的基础之上,你需要添加到环境variables (即PATH),node.js的位置,除非它已经在/ usr / bin /中。