【问题标题】:expect: how to keep all output?期望:如何保持所有输出?
【发布时间】:2012-04-17 05:39:22
【问题描述】:

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

问题:我需要执行 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)"}
  }
}

甚至fancier

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 不是一个选项,请不要浪费时间谈论它。

【问题讨论】:

    标签: expect


    【解决方案1】:

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

    【讨论】:

    • 完美。谢谢。一个问题:所有 git 输出现在都打印了两次。
    • log_user 0 添加到您的期望脚本中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多