使用 NSTask 执行离子构建命令 - 无法访问启动路径
Using NSTask to execute ionic build commands - launch path not accessible
我正在使用具有命令行界面的 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 的主题。我的错误是什么?
编辑:
感谢 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(ionic 建立在节点之上)。我发现 this 问题 - 可能是缺少具有正确名称的符号链接。但是为节点设置符号链接没有帮助。有什么想法吗?
编辑2:
我给了克里斯蒂克正确的答案,尽管我最终无法让它发挥作用。我还在调查。可能是节点安装错误。
编辑3:
我看到一些帖子提到如果 node 由 homebrew 重新安装可能会更好,因为 homebrew 在没有 sudo 的情况下安装它。简评:没用
如果您想使用 bash
启动 ionic
,您需要执行的等效命令是 /bin/bash -c ionic run
,因此您需要更改以下内容:
- 从
currentDirectoryPath
中删除前导cd
(这可能是从终端复制+粘贴的错字)并添加前导/
以获得绝对路径
- 将
arguments
更改为 @[@"-c",@"ionic",@"run"]
,因为 NSTask 的每个参数都应该表示数组的一个项目。
如果由于找不到其他工具而导致 /usr/bin/bash
出现问题,您可以尝试使用 /bin/sh
。
Update 与 Aditya Vaidyam pointed out 一样,您可能还需要设置环境变量(尤其是 PATH
一个),以模拟与终端。如果你想找出设置了哪些环境变量,只需运行 env
命令。
除了 Cristik 建议的内容之外,您还需要将 node.js 的位置添加到 environment variables(即 PATH),除非它已经在 /usr/bin/ 左右。
我正在使用具有命令行界面的 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 的主题。我的错误是什么?
编辑:
感谢 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(ionic 建立在节点之上)。我发现 this 问题 - 可能是缺少具有正确名称的符号链接。但是为节点设置符号链接没有帮助。有什么想法吗?
编辑2: 我给了克里斯蒂克正确的答案,尽管我最终无法让它发挥作用。我还在调查。可能是节点安装错误。
编辑3: 我看到一些帖子提到如果 node 由 homebrew 重新安装可能会更好,因为 homebrew 在没有 sudo 的情况下安装它。简评:没用
如果您想使用 bash
启动 ionic
,您需要执行的等效命令是 /bin/bash -c ionic run
,因此您需要更改以下内容:
- 从
currentDirectoryPath
中删除前导cd
(这可能是从终端复制+粘贴的错字)并添加前导/
以获得绝对路径 - 将
arguments
更改为@[@"-c",@"ionic",@"run"]
,因为 NSTask 的每个参数都应该表示数组的一个项目。
如果由于找不到其他工具而导致 /usr/bin/bash
出现问题,您可以尝试使用 /bin/sh
。
Update 与 Aditya Vaidyam pointed out PATH
一个),以模拟与终端。如果你想找出设置了哪些环境变量,只需运行 env
命令。
除了 Cristik 建议的内容之外,您还需要将 node.js 的位置添加到 environment variables(即 PATH),除非它已经在 /usr/bin/ 左右。