为什么我的git自动更新Expect脚本不起作用?

时间:2012-12-30 17:02:02

标签: linux git bash github expect

我想创建一个可以更新所有GitHub存储库的脚本。

我只需要输入我的用户名和密码,脚本将通过一个存储库列表,调用git push并通过补充的Expect脚本提供必要的信息。

这是我的bash脚本:

#! /bin/bash

echo "Updating GitHub projects from project_list.txt."
echo

read -p "GitHub username: " un
read -p "GitHub password: " -s pw

echo
echo

while read line
do
    eval dir=$line
    echo "Updating:" $dir"."
    cd $dir
    $SF/githubexpect $un $pw
    echo
    echo
done < $SF/project_list.txt

$SF是一个全局环境变量,包含我的脚本文件夹的绝对路径。

这是githubexpect脚本:

#! /usr/bin/expect

set un [lindex $argv 0]
set pw [lindex $argv 1]

spawn git push

expect "Username"
send $un\n

expect "Password"
send $pw\n

当我运行bash脚本时,事情按预期进行。

  1. 我被提示输入信息。
  2. 脚本成功启动并继续阅读project_list.txt文件。
  3. 一旦它发现自己在存储库的目录中,它就会调用githubexpect脚本并且正确地传递信息(我已经测试了这个)。
  4. githubexpect正确生成git push
  5. 系统会提示输入(我在控制台中看到了这一点)。
  6. 它确实提供了我的信息(再次,我也看到了这一点)。
  7. 然后它继续到下一个存储库,就像没有发生任何事情一样。 &lt; - 错误!
  8. 我怀疑githubexpect脚本可能相对于它自己产生git push,而不是当前脚本正在执行的目录,所以git甚至找不到存储库。这可能是假的,因为我的脚本文件夹(githubexpect所在的)也是一个存储库。

1 个答案:

答案 0 :(得分:11)

您应该发送\r而不是\n。但真正的问题是你不要等git push完成。将其添加为期望脚本的最后一行

expect eof