2016-11-29 18 views
2

が、以下は現在のRubyスクリプトを終了し、SSHのインスタンスを使用してプロセスに置き換えられます異なる:ルビーを使用する場合は1

exec "ssh host -p 1234 -v"

が、このことは可能ですスウィフトでやる?

+0

Swiftには 'system' APIがありましたが、' posix_spawn' APIと 'NSTask'の代わりに非推奨です。私はそれらから始めるだろう。 – JAL

+0

@ JAL:これらは若干異なりますが、posix_spawnは新しいプロセスを作成します。 execX関数は、既存のプロセスを置き換えます。 –

答えて

2

execvおよびBSDライブラリの関連機能 は、Swiftから呼び出すことができます(変数のあるものを除き、 引数リスト)。唯一の課題は、引数リストとして渡すことができる

UnsafePointer<UnsafeMutablePointer<Int8>?> 

を作成することです。簡単な例:

import Foundation 

let args = ["ls", "-l", "/Library"] 

// Array of UnsafeMutablePointer<Int8> 
let cargs = args.map { strdup($0) } + [nil] 

execv("/bin/ls", cargs) 

fatalError("exec failed") 

ここでは、あなたがconst char *を期待 C関数strdup()にスウィフトの文字列を渡すことができることを使用し、 コンパイラは、一時的なUTF-8表現( String value to UnsafePointer<UInt8> function parameter behaviorを参照)を作成しています。

+0

これはうまくいきますが、 'execv'を呼び出す直前に' cargs.append(nil) 'を追加しなければなりませんでした。ありがとう! – Doug

+1

@Doug:あなたは完全に正しいです! –

+0

これはうれしい、良い答えです。 – JAL

関連する問題