我正试图git add -p
逃离红宝石。问题是这个命令显示部分文件并等待用户输入,可能会打开 git 编辑器。由于这个原因,执行系统命令的常规内核方法将不起作用。我尝试使用open3
,这是我到目前为止得到的:
require "open3"
Open3.popen3("\git add -p #{files_to_add.join(" ")}") do |stdin, stdout, stderr, wait_thr|
end
我不知道该放什么,在互联网上也找不到任何线索。
有什么想法可以解决这个问题吗?
注意:我不想使用任何宝石
编辑: open3
不工作。我现在正在试验pty
. 这是我所拥有的:
require "pty"
begin
PTY.spawn("\git add -p #{files_to_add.join(" ")}") do |r, w, pid|
begin
r.each { |line| print line }
rescue Errno::EIO
end
end
rescue PTY::ChildExited => e
puts "The child process exited!"
end
此代码打印要修补的第一个块,但随后 git 询问的“问题”(换句话说,标准输入提示)没有出现。我显然没有在上面的代码中打印它,但我似乎无法找到如何做到这一点。有任何想法吗?