2015-05-21 51 views
8

我与离子具有命令行界面工作启动路径。我想创建一个帮助执行某些命令的小型Mac应用程序。使用NSTask执行离子生成命令 - 不能访问

在终端I 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的文章。我的错误是什么?


编辑:

感谢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:节点:No such file or directory。我想这是来自一个问题,node.js没有找到(离子建立在节点之上)。我发现this问题 - 缺少正确名称的符号链接可能是原因。但是设置节点的符号链接并没有帮助。有任何想法吗?


EDIT2: 我给Christik正确的答案,即使我不能最终得到它的工作。我仍在调查。也许这是节点安装错误。


EDIT3: 我看到提到,可能会更好,如果节点是由自制重新安装,因为安装自制软件也没有sudo一些职位。一句话评论:没有帮助

回答

3

如果你想使用bash推出ionic,等效命令,你需要执行是/bin/bash -c ionic run,因此你需要更改以下:

  1. 除去从currentDirectoryPath前导cd(这可能是从一个拷贝+膏从终端笔误),并添加一个领先/为具有绝对路径
  2. 变化arguments@[@"-c",@"ionic",@"run"],因为每个参数NSTask应代表阵列的项目。

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

更新作为Aditya Vaidyam指出here您可能还需要设置环境变量(尤其是PATH一个),来模拟相同的条件的终端。如果您想查明设置了哪些环境变量,只需运行env命令。

+0

感谢您的回答,但如上所述,我仍然有麻烦。我会设置一个赏金;-) – brainray

+0

@brainray:'@ [@“ - c”,@“ionic”,“run”]'参数列表是针对@“/ bin/sh”可执行文件的。对于离子,你只需要通过'@ [@“run”]',对不起,如果我不清楚这一点。 – Cristik

+0

感谢您的关注:-)但即使只有'@ [@“run”]'作为参数,它也会给出'env:node:No such file or directory'。我想是离子安装有一些东西 – brainray

3

除了已经在/ usr/bin /中,除了Cristik建议的之外,还需要添加到environment variables(即PATH)node.js的位置。