3

Swiftからシェルスクリプトを実行するにはどうしたら良いでしょうか?
尚、シェルスクリプトの実行が終了するまで、Swiftの処理は待機したいです。

mattn
  • 4,486
  • 14
  • 30
ソラ君
  • 149
  • 9
  • 「シェルマクロ」という用語は一般的ではないと思いますが、シェルスクリプトのことを言っているのでしょうか? – h2so5 May 09 '15 at 22:47
  • はい、シェルスクリプトです。 Swiftから実行させてシェルスクリプトが実行を終了しましたら後続の処理をさせたいです。 – ソラ君 May 09 '15 at 23:02

3 Answers3

3

NSTaskクラスを使用してください。
waitUntilExitでスクリプトの終了を待機しています。

import Foundation

let task = NSTask.launchedTaskWithLaunchPath("/bin/sh", arguments: ["-c", "sleep 3"])
task.waitUntilExit()
h2so5
  • 4,103
  • 2
  • 16
  • 36
0

下記のような記述で宜しいのでしょうか?

let task = NSTask.launchedTaskWithLaunchPath("./test.sh", arguments: ["-c","sleep 3"])

task.waitUntilExit()

この場合、test.shはX-Codeのプロジェクトのどの位置に配置しておけば宜しいのでしょうか?

mattn
  • 4,486
  • 14
  • 30
ソラ君
  • 149
  • 9
  • "./test.sh", arguments: ["-c","sleep 3"] ←これだと動いていないと言うか、動いていないように見える><、 – ソラ君 May 11 '15 at 10:21
0

let task = NSTask.launchedTaskWithLaunchPat
("/bin/sh", arguments: ["-c","xxxxx.sh"])
task.waitUntilExit()

xxxxx.shの部分を該当するシェルマクロにする。
xxxxx.shの部分はフルパスで書く。

これで動きました。 ありがとうございました。

ソラ君
  • 149
  • 9