0

我正在尝试从 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 钩子的好语言。提前致谢。

4

1 回答 1

0

大多数 Git 钩子都使用标准输入运行,或者来自 Git 写入信息的管道,或者标准输入与终端完全断开连接。commit-msg钩子属于第二类。

您使用哪种语言并不重要:在commit-msg挂钩中读取标准输入会立即看到 EOF,因为标准输入连接到/dev/null(Linux/Unix) 或NUL:(Windows)。

在类 Unix 系统上,您可以尝试打开/dev/tty. 请注意,如果 Git 是从没有(某些分离的进程,例如 via )的东西运行的,或者/dev/tty由于其他原因导致cron读取不好的地方,这可能会导致其他问题,所以要小心。/dev/tty

于 2017-11-24T18:51:53.857 回答