git钩 - 红宝石代码 - 交互式输入



我正在尝试从git钩执行代码(commit-msg hook)中获取输入。但是Ruby无法在输入点停止。并且它执行代码好像输入就像一个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钩的好语言。预先感谢。

大多数git挂钩都是由stdin运行的,要么来自git写入信息的管道,要么完全与终端断开了stdin。commit-msg钩属于第二类。

您使用哪种语言没有关系: commit-msg挂钩中读取stdin会立即看到EOF,因为stdin已连接到/dev/null(Linux/unix)或NUL:(Windows)。

在类似Unix的系统上,您可以尝试打开/dev/tty。请注意,如果git是从没有 a的 a /dev/tty(某些分离的过程,例如通过 cron)或出于某些其他原因读取 /dev/tty不好的地方,这可能会导致其他问题,这可能会导致其他问题,因此,请小心。

相关内容

  • 没有找到相关文章

最新更新