当我直接在终端输入时 - 它按预期工作,如果应用未运行则返回 0 ,如果是,则返回 1 。
lsappinfo list | grep -v grep | grep bundleID | grep com.test.myapp | wc -l </ p>
但是,当我使用下面的代码(swift 3 - macOS)时,它说它是一个无法识别的命令?
// DECLARE TASK
let task = Process()
// DEFINE THE PATH
task.launchPath = "/usr/bin/lsappinfo"
// DEFINE THE ARGUMENTS
task.arguments = ["list | grep -v grep | grep bundleID | grep com.test.myapp | wc -l"]
// DECLARE outputPipe
let outputPipe = Pipe()
// RUN THE TASK
task.launch()
// DECLARE data
let data = outputPipe.fileHandleForReading.readDataToEndOfFile()
// DECLARE output AS THE UTF-8 STRING OF THE TERMINAL'S OUTPUT
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
print(output!)
if output == "0" {
print("App is not running!")
} else {
print("App is running!")
}
// PAUSE UNTIL COMPLETED
task.waitUntilExit()
有人可以告诉我我哪里出错了,因为我是Swift的新手,并且仍然在努力探索语言/语法。
提前谢谢大家。
答案 0 :(得分:1)
管道操作不是进程的参数,它们是指示shell连接多个单独进程的指令。如果swift中的任务构造需要一个进程和一组命令行参数,那么这里执行此操作的一种方法可能是启动bash二进制文件,然后将-c "lsappinfo list | grep -v grep | grep bundleID | grep com.test.myapp | wc -l"
作为完整的参数集。这样,你就可以让bash理清完成管道所需要的东西。