下面的代码改编自“在 Bash 脚本中使用 Expect 为 SSH 命令提供密码”的解决方案,以便将参数传递给git push
. 我没有因为传递错误的 uname+pwd 而遇到任何异常,相反,传递正确的 uname+pwd 并不会真正推动任何事情。如何纠正?
git_push.sh
if (( $# == 2 ))
then
:
else
echo "expecting 'username pass', got $@"
exit 1
fi
user="$1"
pass="$2"
expect - <<EOF
spawn git push
expect 'User*'
send "$user\r"
expect 'Pass*'
send "$pass\r"
EOF
终端:
$ [path]/git_push.sh
spawn git push
Username for 'https://github.com': foo
Password for 'https://[email protected]':
或者(没有通配符):
spawn git push
expect "Username for 'https://github.com': "
send "$user\r"
expect "Password for 'https://[email protected]': "
send "$pass\r"
要解决预期的问题:
单引号在期望中没有特殊含义,因此您在 User 和 Pass 提示中寻找文字单引号。这些提示将不包含单引号,因此该
expect
命令会挂起,直到发生超时(默认 10 秒)。发送密码后,您无需等待推送完成:expect 脚本用完了要运行的命令并过早退出,从而杀死了 git 进程。在 any 之后
send
,你应该expect
做点什么。在这种情况下,您期望生成的命令结束,用expect eof