5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift その2Advent Calendar 2017

Day 7

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

Posted at

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

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?