如何运行一个程序并与之交互,如;bash-csh…”;使用swift 4和操场?
如何在使用swift 4和游乐场的bash终端中运行ssh之类的程序并与之交互?终端命令可以在Mac swift游乐场中执行,代码如下:如何运行一个程序并与之交互,如;bash-csh…”;使用swift 4和操场?,swift,bash,ssh,process,swift-playground,Swift,Bash,Ssh,Process,Swift Playground,如何在使用swift 4和游乐场的bash终端中运行ssh之类的程序并与之交互?终端命令可以在Mac swift游乐场中执行,代码如下: @discardableResult func shell(_ command: String) -> String { let task = Process() task.launchPath = "/bin/bash" task.arguments = ["-c", command] let pipe = Pipe() task.standar
@discardableResult func shell(_ command: String) -> String {
let task = Process()
task.launchPath = "/bin/bash"
task.arguments = ["-c", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
return output
}
// Example usage:
let t = shell("ls")
print("\(t)") //prints dir listing
但是,我希望能够与ssh之类的程序进行交互,而不是与ls之类的非交互程序进行交互。例如,命令:
let t = shell("ssh xxx.xxx.xxx.xxx -T -l root -p 22")
将启动ssh,ssh将通过终端提示输入密码。我希望能够以编程方式提供密码并继续。在我看来,由于SSH是在终端上下文中运行的,因此highjacking终端stdin和stdout应该足够了,但是,到目前为止,我还没有成功地实现这一点。以下是我找到的一些资源,它们提供了一些有关highjacking的信息:
关于是否以及如何实现这一点有什么想法吗?
ssh
直接从/dev/tty
而不是stdin
读取密码。要以编程方式控制tty,您需要pty模块/API,这类工具正在使用
我对Swift一无所知,所以不确定它是否有类似的pty模块。如果没有,那么您可以使用来运行
ssh
更新摘要,因为它不是真正的bash终端。