Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
在Swift中启动终端编辑器,如vi或nano_Swift_Shell - Fatal编程技术网

在Swift中启动终端编辑器,如vi或nano

在Swift中启动终端编辑器,如vi或nano,swift,shell,Swift,Shell,我正试图在用Swift编写的命令行程序中启动一个终端编辑器,如vi或nano 这是一个天真的尝试,我猜标准的输入和输出应该是不同的。程序不输出任何内容 let task=Process() task.launchPath=“/usr/bin/env” task.arguments=[“nano”] task.standardInput=FileHandle(用于读取路径:“/dev/tty”) task.standardOutput=文件句柄(用于写入路径:“/dev/tty”) task.la

我正试图在用Swift编写的命令行程序中启动一个终端编辑器,如vi或nano

这是一个天真的尝试,我猜标准的输入和输出应该是不同的。程序不输出任何内容

let task=Process()
task.launchPath=“/usr/bin/env”
task.arguments=[“nano”]
task.standardInput=FileHandle(用于读取路径:“/dev/tty”)
task.standardOutput=文件句柄(用于写入路径:“/dev/tty”)
task.launch()
task.waitUntilExit()

此示例将在终端窗口中启动“vi”编辑器。可以通过将代码复制/粘贴到新添加的“main.swift”文件并删除预先存在的AppDelegate,在Xcode swift项目中运行。还需要关闭沙箱

import Cocoa

let process = Process()
let pipe = Pipe()

process.executableURL = URL(fileURLWithPath:"/bin/sh/")
var args : [String]!
args = []
args.append("-c")
args.append("open '/usr/bin/vi'")
process.arguments = args
process.standardOutput = pipe
process.standardError = pipe
process.terminationHandler = { (process) in
  print("\ndidFinish: \(!process.isRunning)")
}
let fileHandle = pipe.fileHandleForReading
do {
  try process.run()
  let outStr = String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8)
  print(outStr as Any)
} catch { print(String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8) as Any)}

// **** main.swift **** //
let app = NSApplication.shared
app.setActivationPolicy(.regular)
app.activate(ignoringOtherApps:true)
app.run()


谢谢这将在新的终端窗口中打开vi。我要做的是在运行程序的同一终端中打开vi。