我想创建一个可以更新所有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脚本时,事情按预期进行。
project_list.txt
文件。git push
。我怀疑githubexpect脚本可能相对于它自己产生git push
,而不是当前脚本正在执行的目录,所以git甚至找不到存储库。这可能是假的,因为我的脚本文件夹(githubexpect所在的)也是一个存储库。
答案 0 :(得分:11)
您应该发送\r
而不是\n
。但真正的问题是你不要等git push
完成。将其添加为期望脚本的最后一行
expect eof