我试图从git hook执行代码(commit-msg hook)获取输入。但红宝石无法在输入点停下来。它执行代码就好像输入就像一个puts语句。这是我尝试过但失败的代码。
#!/usr/bin/env ruby
require 'open3'
def take_input_here
Open3.popen3("pwd", :chdir=>"/") {|stdin, stdout, stderr, thread|
p stdout.read.chomp #=> "/"
}
input_val = gets.chomp
puts input_val
puts 'Hellow World!'
end
take_input_here
puts "Commit Aborted."
Process.exit(1)
有人请帮助我接受这个互动输入,或者建议我写一个很好的语言来编写git hooks。提前谢谢。
答案 0 :(得分:0)
大多数Git钩子都是使用stdin来运行的,这些stdin来自Git写入信息的管道,或者stdin与终端完全断开连接。 commit-msg
挂钩属于第二类。
使用哪种语言无关紧要:在commit-msg
挂钩中读取stdin将立即看到EOF,因为stdin已连接到/dev/null
(Linux / Unix)或{{1} (Windows)。
在类Unix系统上,您可以尝试打开NUL:
。请注意,如果Git是从没有拥有 /dev/tty
(某些分离的过程,例如,通过/dev/tty
)或阅读cron
的内容中运行的因某些其他原因而不好,这可能会导致其他问题,所以要小心。