【问题标题】:Using NSTask to execute ionic build commands - launch path not accessible使用 NSTask 执行离子构建命令 - 无法访问启动路径
【发布时间】: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 的情况下安装它。简短评论:没有帮助

【问题讨论】:

    标签: objective-c node.js macos ionic nstask


    【解决方案1】:

    如果您想使用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),以模拟与终端相同的条件。如果你想知道设置了哪些环境变量,只需运行envcommand。

    【讨论】:

    • 感谢您的回答,但如上所述,我仍然遇到问题。我会设置一个赏金;-)
    • 感谢您的关注 :-) 但即使只有@[@"run"] 作为参数,它也会给出env: node: No such file or directory。我想这与离子安装有关
    • 您找到解决方案了吗?我在使用 NSTask 运行 Gulp 时遇到了同样的问题。
    • @Cristik 感谢您的回复;我确信论点通过了;看看我是否在终端上运行特定命令,例如'class-dump -H -o ' 它可以工作并将头文件制作到 ;但是对于 NSTask,我对上面建议的代码做同样的事情。它给出了错误“/bin/sh: class-dump: No such file or directory”。
    • 怎么做? @克里斯蒂克
    【解决方案2】:

    在 Cristik 建议的基础上,您需要将 node.js 的位置添加到 environment variables(即 PATH),除非它已经在 /usr/bin/ 左右。

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2011-03-14
      • 1970-01-01
      • 2017-09-20
      • 2020-06-03
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      相关资源
      最近更新 更多