osx - Running terminal command in swift doesn't work -


i'm trying check if brew command available using command -v brew. example output in terminal:

macbook-air-user:~ user$ command -v brew  /usr/local/bin/brew 

i'm using code:

func runcommand(command cmd : string) -> array<string> {     var result : array<string> = []      let task = nstask()     task.launchpath = "/bin/bash"     task.arguments = (["-c", cmd])      let pipe = nspipe()     task.standardoutput = pipe     let handle = pipe.filehandleforreading     handle.waitfordatainbackgroundandnotify()      let errpipe = nspipe()     task.standarderror = errpipe     let errhandle = errpipe.filehandleforreading     errhandle.waitfordatainbackgroundandnotify()      var startobserver : nsobjectprotocol!     startobserver = nsnotificationcenter.defaultcenter().addobserverforname(nsfilehandledataavailablenotification, object: nil, queue: nil) { notification -> void in         let data = handle.availabledata         if data.length > 0 {             if let output = string(data: data, encoding: nsutf8stringencoding) {                 print("output : \(output)")                 result.append(output)             }         }         else {             print("eof on stdout")             nsnotificationcenter.defaultcenter().removeobserver(startobserver)         }     }      var endobserver : nsobjectprotocol!     endobserver = nsnotificationcenter.defaultcenter().addobserverforname(nstaskdidterminatenotification, object: nil, queue: nil) {     notification -> void in         print("task terminated code \(task.terminationstatus)")         nsnotificationcenter.defaultcenter().removeobserver(endobserver)     }      var errobserver : nsobjectprotocol!     errobserver = nsnotificationcenter.defaultcenter().addobserverforname(nstaskdidterminatenotification, object: nil, queue: nil) {     notification -> void in         let data = errhandle.availabledata         if (data.length > 0) {             if let output = string(data: data, encoding: nsutf8stringencoding) {                 print("error : \(output)")                 result.append(output)                  nsnotificationcenter.defaultcenter().removeobserver(errobserver)             }         }     }      task.launch()     task.waituntilexit()     return result } 

and running this:

let arr = runcommand(command: "command -v brew") 

and array empty - can't output. how solve problem?

upd: same happens if try which brew command

upd2: works built-in commands, such ls, doesn't work ones brew or tor

the $path of instance of bash created run command may not set. 1 way round specify explicit path command:

runcommand(command: "command -v /usr/local/bin/brew") 

Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -