如何用不同的Swift脚本进程替换当前的Swift脚本进程

时间:2016-11-29 21:19:46

标签: swift macos terminal scripting

使用Ruby时,以下内容将终止当前的ruby脚本,并用ssh实例替换该进程:

exec "ssh host -p 1234 -v"

这可以在Swift中完成吗?

1 个答案:

答案 0 :(得分: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")

这里使用的是你可以将Swift字符串传递给 期望strdup()的C函数const char *和。{ 编译器创建一个临时的UTF-8表示(参见 String value to UnsafePointer<UInt8> function parameter behavior)。