Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何运行一个程序并与之交互,如;bash-csh…”;使用swift 4和操场?_Swift_Bash_Ssh_Process_Swift Playground - Fatal编程技术网

如何运行一个程序并与之交互,如;bash-csh…”;使用swift 4和操场?

如何运行一个程序并与之交互,如;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

如何在使用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.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终端。