我想制作一个脚本来更新我所有的 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
file.
- 一旦它发现自己位于存储库的目录中,它就会调用 githubexpect 脚本并正确地传递信息(我已经对此进行了测试)。
- githubexpect 正确生成
git push
.
- 它会提示输入(我在控制台中看到了这一点)。
- 它确实提供了我的信息(同样,我也看到了这一点)。
- 然后它就继续到下一个存储库,就像什么都没发生一样。
我怀疑 githubexpect 脚本可能正在生成git push
相对于其自身,而不是当前脚本正在执行的目录,因此 git 甚至找不到存储库。这可能是错误的,因为我的脚本文件夹(githubexpect 所在的文件夹)也是一个存储库。
你应该发送\r
代替\n
。然而真正的问题是你不等待git push
去完成。将其添加为期望脚本的最后一行
expect eof
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)