Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

とりあえずどうやるのって調べたら。
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アプリでたくさん作って行きたいですね!

pianopia
都内で小さい会社のプログラマ社長やってます。 Nim / Kotlin / Rust / Swift / Python / Haskell / Unity / iOS / Android / Web / PHP / Processing / vvvv / TouchDesigner / AWS / Network (Fortigate / L3Switch..) / CTF /
https://pianopia.net
nim-in-japan
Nim言語の日本コミュニティです。
https://nim-lang.org/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away