我尝试使用brew
检查command -v brew
命令是否可用。终端输出示例:
MacBook-Air-USER:~ USER$ command -v brew
/usr/local/bin/brew
我正在使用此代码:
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 with 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
}
并按照以下方式运行:
let arr = runCommand(command: "command -v brew")
阵列总是空的 - 我无法获得任何输出。如何解决这个问题?
UPD:如果我尝试which brew
命令
UPD2:它仅适用于内置命令,例如ls
,但不适用于brew
或tor
答案 0 :(得分:1)
可能未设置为运行命令而创建的$PATH
实例的bash
。一种方法是为命令指定显式路径:
runCommand(command: "command -v /usr/local/bin/brew")