0

背景:当本地用户名与git用户名不同时,即使有~/.netrc,git也会坚持要求输入密码(可以回车,然后使用netrc,但这个回车是必须的)。

问题:我需要执行 git pull 将密码传递给 git,但我想查看 git 对 stdout 的回复(可能稍后重定向)。我试过

#!/usr/bin/expect -f
spawn /usr/bin/git $argv
expect Password:
send "secret"

它似乎工作,但我没有看到 git 输出。

我试过简单

puts "$expect_out(buffer)"

和花哨的

while (1) {
  expect {
    eof  {break}
    -re ".*"  {puts "$expect_out(buffer)"}
  }
}

甚至更高级

while (1) {
  expect {
    -re "(\[^\n]*\)\n" { send_user $expect_out(buffer) }
    eof  {break}
  }
}

更简单一点

while (1) {
  expect {
    "\n" { send_user $expect_out(buffer) }
    eof  {break}
  }
}

并且都不打印 git 输出。

PS。在这种特定情况下,ssh 不是一个选项,请不要浪费时间谈论它。

4

1 回答 1

2

输入密码后,您需要“回车”:send "secret\r"

于 2012-04-17T09:19:34.773 回答