ShellScript
MacOSX
Xcode
Swift3.0

MacOSXアプリからSwift3でShellscriptファイルを実行したかった。

とりあえずどうやるのって調べたら。
NSTaskクラスっていうのがあるらしいが、
使ってみると、、、

スクリーンショット 2017-12-25 14.27.35.png

無い!!
と思ったけど、Xcode親切だった。。
Processクラスになったで!と教えてくれてました。

ということで以下、実装です。

// 対象のshファイルがあったらif文内を実行
if let path: String = Bundle.main.path(forResource: "testShellscript", ofType: "sh") {

    let task = Process()

    task.launchPath = "/bin/sh"

        // ここは実行引数を、実行コマンドのあとに幾つでも設定可能か。。?
    task.arguments = [path, "--option", "testArguments2"]

        // シェルの出力結果を受け取るPipeの設定
    let pipe = Pipe()
    task.standardOutput = pipe

    // シェルを実行
    task.launch()
    task.waitUntilExit() // シェルの実行が終わるまで待つ

    // シェルの結果を取得
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)

    // outputに結果が格納されるよ!
    print("\(output!)")

} else {

    print("指定されたファイルが見つかりません。")

}

あとはプロジェクト直下に対象のshファイルを置いておきます。

それからそのコマンドの実行権限がちゃんとないとダメみたいですね。

Automatorでできないような、細かいshellの実行を
MacOSXアプリでたくさん作って行きたいですね!