使用NSTask执行离子构建命令 - 无法访问启动路径

bra*_*ray 8 macos objective-c nstask node.js ionic

我正在使用具有命令行界面的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];
Run Code Online (Sandbox Code Playgroud)

但这给了我'工作目录不存在'.我已经在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];
Run Code Online (Sandbox Code Playgroud)

现在我收到以下错误:env:node : No such file or directory. 我想这来自一个问题,即找不到node.js(离子是在节点之上构建的).我发现了这个问题 - 缺少正确名称的符号链接可能是原因.但是为节点设置符号链接没有帮助.有任何想法吗?


编辑2:我给了Christik正确的答案,即使我最终无法让它工作.我还在调查.也许这是节点安装错了.


编辑方式3:我看到一些帖子提到它可能会更好,如果自己的homebrew重新安装节点,因为自制软件安装它没有sudo.简短评论:没有帮助

Cri*_*tik 3

如果您想使用bashlaunch ionic,则需要执行的等效命令是/bin/bash -c ionic run,因此您需要更改以下内容:

  1. 删除前导(这可能是从终端复制+粘贴的拼写错误)并添加前导cd以获得绝对路径currentDirectoryPath/
  2. 更改arguments@[@"-c",@"ionic",@"run"],因为 NSTask 的每个参数都应代表数组的一项。

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

更新正如Aditya Vaidyam在这里指出的那样,您可能还需要设置环境变量(尤其是环境PATH变量),以模拟与终端相同的条件。如果你想知道设置了哪些环境变量,只需运行env命令即可。