终端命令无法识别?

时间:2017-02-05 18:41:17

标签: macos swift3

当我直接在终端输入时 - 它按预期工作,如果应用未运行则返回 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的新手,并且仍然在努力探索语言/语法。

提前谢谢大家。

1 个答案:

答案 0 :(得分:1)

管道操作不是进程的参数,它们是指示shell连接多个单独进程的指令。如果swift中的任务构造需要一个进程和一组命令行参数,那么这里执行此操作的一种方法可能是启动bash二进制文件,然后将-c "lsappinfo list | grep -v grep | grep bundleID | grep com.test.myapp | wc -l"作为完整的参数集。这样,你就可以让bash理清完成管道所需要的东西。