【问题标题】:git add, commit via expect scriptgit add,通过期望脚本提交
【发布时间】:2017-06-25 19:11:22
【问题描述】:

在我的工作中,为了使用 git,我们需要登录 github,通过使用函数 git_login 这是一个名为 git.sh 的脚本的内置函数,然后它会询问用户密码。

我正在尝试自动执行此过程,expect 脚本显示我已登录,但是在尝试推送或提交时,它要求输入未知用户的密码,应该很简单吧?!

#!/usr/bin/expect -f

set timeout 15
set tagName [[lindex $argv 0]
if { [llength $tagName] == 0 } {
    puts "no tag name provided...\n"
    exit 1
}
spawn /bin/bash -c "source git.sh && git_login my_user"
expect "assword: "
send -- "my_password"
expect "is now logged in"
exec git add .
exec git commit "$tagName"
exit

或代替最后 3 行

git push origin "$tagName"
exit

我使用 -d 而不是 -f 执行脚本(用于调试)

【问题讨论】:

  • 根据您的调试屏幕截图,您有一个 is now logged in 的预期模式。您在此处发布时是否错过了这一点?用正确的脚本更新它。
  • 我同意添加屏幕截图比解释要容易得多但是meta.*.com/questions/285551/…
  • 至于截图..注意..至于“现在登录”显然我有..代码已修复谢谢:)

标签: git bash github expect


【解决方案1】:

expect 脚本显示我已登录

显然没有:它寻找 glob 模式“is now logged in”但没有找到。

expect automate tool 通常有如下序列:

expect "password:"
# Send the password, and then wait for a shell prompt.
send "$my_password\r"

(不是expect "assword:"

【讨论】:

  • 是的...
    您可以在绿色行之后看到一行,发现模式“现已登录”,此外,只是为了确保我将 P 添加到assword 并再次运行它.. 相同的结果
  • @RamiHassan 那么expect 监控的脚本的哪一步让 git 要求输入密码?如果在 git 显示密码请求之前,expect 检测到 git 要求输入密码,这是否可能是一个并发问题?
  • 这部分:spawn /bin/bash -c "source git.sh && git_login my_user",我想到了,log_in是由脚本git.sh创建的,我尝试添加sleep在提交/推送部分之前,没有帮助
  • @RamiHassan 在git_login my_user 中,哪一行要求输入密码?
  • 如果我从 shell 运行函数(git.sh 脚本函数)git_login user_x >> 我被提示输入 的密码,老实说我认为我没有得到你的意思