Git
如何正確使用 spawn-expect-send 進行“git push”?
下面的程式碼改編自“在 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://foo@github.com':
或者(沒有萬用字元):
spawn git push expect "Username for 'https://github.com': " send "$user\r" expect "Password for 'https://$user@github.com': " send "$pass\r"
要解決預期的問題:
expect - <<EOF spawn git push expect 'User*' send "$user\r" expect 'Pass*' send "$pass\r" EOF
- 單引號在期望中沒有特殊含義,因此您在 User 和 Pass 提示中尋找文字單引號。這些提示將不包含單引號,因此該
expect
命令會掛起,直到發生超時(預設 10 秒)。- 發送密碼後,您無需等待推送完成:expect 腳本用完了要執行的命令並過早退出,從而殺死了 git 程序。在 any 之後
send
,你應該expect
做點什麼。在這種情況下,您期望生成的命令結束,用expect eof
expect - <<_END_EXPECT spawn git push expect "User*" send "$user\r" expect "Pass*" send "$pass\r" set timeout -1 ; # no timeout expect eof _END_EXPECT