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
Post a Comment