2015-05-21 48 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的位置。