2016-04-05 11 views
0

私はこのコードを使用して端末コマンドを実行しています。これまでのところ、これはいつも働いています。今度はそれについて文句を言う:端末コマンドがSwiftで動作しない

The file /Users/meee/Library/Developer/Xcode/DerivedData/nameOfXCodeProject-baelzqzfuiydshbtbifxkywekybq/Build/Products/Debug/Chrome.app does not exist. 

私はargsでコマンドを実行しようとすると失敗した。それはターミナルの魅力のように働く。何が問題なの?

let strEx = "open -a /Applications/Google Chrome.app --args argsToSet=\"MYARGS\"" 
strEx.runAsCommand() 

extension String { 
    func runAsCommand() -> String { 
     let pipe = NSPipe() 
     let task = NSTask() 
     task.launchPath = "/bin/sh" 
     task.arguments = ["-c", String(format:"%@", self)] 
     task.standardOutput = pipe 
     let file = pipe.fileHandleForReading 
     task.launch() 
     if let result = NSString(data: file.readDataToEndOfFile(), encoding: NSUTF8StringEncoding) { 
      return result as String 
     } 
     else {return "--- Unable to initialize string from file data ---"} 
    } 
} 

編集:これは私が今使っているものです。

let pipe = NSPipe() 
     let task = NSTask() 
     task.launchPath = "/bin/sh" 
     task.arguments = [ "-c", "open", "-a","/Applications/Google Chrome.app","--args","myargs=ARGS"] 
     task.standardOutput = pipe 
     let file = pipe.fileHandleForReading 
     task.launch() 
     if let result = NSString(data: file.readDataToEndOfFile(), encoding: NSUTF8StringEncoding) { 
      print(result as String) 
     } 
     else {print("--- Unable to initialize string from file data ---")} 

     for argum in task.arguments!{ 
      print(argum) 
     } 

-c、-a ...と同じものが出力されます。

答えて

0

私はこの行を疑う:何がしたいことはあるとき

"/bin/sh" "-c" "open -a /Applications/Google Chrome.app --args argsToSet=\"MYARGS\"" 

"/bin/sh" "-c" "open" "-a" "/Applications/Google Chrome.app" "--args" "argsToSet=\"MYARGS\"" 

(または類似したもの)

task.arguments = ["-c", String(format:"%@", self)] 

が効果的に、このコマンドラインを作成しています。

したがって、引数は単一の文字列ではなく配列として保持します。そうすれば、\"のようなものは必要ありません。実際には、引用符をまったく使用する必要はありません。

+0

停止するための値。私は引数の配列でほとんど運がないです。 task.arguments = ["-c"、 "open"、 "-a"、 "/ Applications/Google Chrome.app"、 " - args"、 "myargs = ARGS"]のようになります。何も起こっていない、と私はなぜわからない。 – sanjihan

関連する問題